bnA Geschrieben 6. Februar 2009 Geschrieben 6. Februar 2009 Hallo, ich hab ein Problem bei einer etwas komplizierteren SELECT Abfrage Also die Abfrage sieht momentan so aus select NUR.VLNDN001.LAND_LANDKUERZEL, NUR.VLNDN001.LNDN_NAME, NUR.VLAND001.LAND_ISO_CODE_3, NUR.VLNDN001.LNDN_SPRACHENSL FROM NUR.VLNDN001, NUR.VLAND001 WHERE NUR.VLNDN001.LNDN_SPRACHENSL = 'D' AND upper(NUR.VLNDN001.LAND_LANDKUERZEL) = upper('DEU') OR upper(NUR.VLNDN001.LNDN_NAME) = upper('DEU') OR upper(NUR.VLAND001.LAND_ISO_CODE_3) = upper('DEU') ORDER BY NUR.VLNDN001.LAND_LANDKUERZEL ASC; Bei dem Beispiel suche ich nach 'DEU' und das funktioniert zum Teil auch, nur dass er nicht beachtet, dass er nur die Spalten mit NUR.VLNDN001.LNDN_SPRACHENSL = 'D' nehmen soll Folgende Ausgabe: Wenn ich z.B. nach Österreich suche, was in der 2. Spalte stehen sollte bekomme ich folgende Ausgabe: Und wenn ich nach Einträgen suche, die in der ersten Spalte stehen sollten, dann bekomme ich folgendes, wenn ich z.B. nach 'A' suche: Das Prinzip der SQL Abfrage ist, dass ich nen Suchfeld (TextField) habe und er egal was eingegeben wurde, alle Spalten nach dem Eintrag durchsucht. Aber wie ihr gesehen habt, bekomme ich nicht die gewünschten Ergebnisse. Könnte mir eventuell jmd. helfen? Daankeschön
dr.dimitri Geschrieben 6. Februar 2009 Geschrieben 6. Februar 2009 Hi, Du hast kein Join Kriterium angegeben, weshalb Du ein sog. kartesisches produkt bekommst (jede Zeile der einen Tabelle wird mit jeder Zeile der anderen verknüpft). Daher resultieren deine unerwarteten Ergebnisse. Du brauchst eine Bedingung, die deine beiden Tabellen explizit miteinander verknüpft. Dim
bnA Geschrieben 6. Februar 2009 Autor Geschrieben 6. Februar 2009 Okay, dann hab ich die 2 Tabellen jetzt so verknüpft select NUR.VLNDN001.LAND_LANDKUERZEL, NUR.VLNDN001.LNDN_NAME, NUR.VLAND001.LAND_ISO_CODE_3, NUR.VLNDN001.LNDN_SPRACHENSL FROM NUR.VLNDN001, NUR.VLAND001 WHERE NUR.VLNDN001.LAND_LANDKUERZEL = NUR.VLNDN001.LAND_LANDKUERZEL AND upper(NUR.VLNDN001.LAND_LANDKUERZEL) = upper('Österreich') OR upper(NUR.VLNDN001.LNDN_NAME) = upper('Österreich') OR upper(NUR.VLAND001.LAND_ISO_CODE_3) = upper('Österreich') AND NUR.VLNDN001.LNDN_SPRACHENSL = 'D' ORDER BY NUR.VLNDN001.LAND_LANDKUERZEL ASC; Leider bringt das immernoch nicht den gewünschten Effekt LAND_LANDKUERZEL ist logischerweise in beiden Tabellen vorhanden und auch gleich...
bnA Geschrieben 6. Februar 2009 Autor Geschrieben 6. Februar 2009 (bearbeitet) Jetzt funktioniert aber schonmal die suche nach NUR.VLAND001.LAND_ISO_CODE_3 Also wenn ich da z.B. 'DEU' eingebe, dann geht das. Kann das iregndwie an der Reihenfolge der OR's liegen? hatte auch oben die falsche Zeile geschrieben, dieses JOIN Ding heißt natürlich WHERE NUR.VLNDN001.LAND_LANDKUERZEL = NUR.VLAND001.LAND_LANDKUERZEL Bearbeitet 6. Februar 2009 von bnA
dr.dimitri Geschrieben 6. Februar 2009 Geschrieben 6. Februar 2009 Kann das iregndwie an der Reihenfolge der OR's liegen? Vermutlich. Da fehlt eine Klammer: AND [b]([/b]upper(NUR.VLNDN001.LAND_LANDKUERZEL) = upper('Österreich') OR upper(NUR.VLNDN001.LNDN_NAME) = upper('Österreich') OR upper(NUR.VLAND001.LAND_ISO_CODE_3) = upper('Österreich')[b])[/b] Gleiches bei der anderen Bedingung. Interessant find ich allerdings, dass in dem Feld Länderkürzel bzw. ISO Kürzel wirklich der komplette Landesname stehen kann. da solltest Du mal deine Daten bereinigen, denn wenn das wirklich so ist kann man sich diese Aufteilung ja auch direkt schenken und alles in eine Spalte schreiben :upps Dim
bnA Geschrieben 7. Februar 2009 Autor Geschrieben 7. Februar 2009 Danke, ich werde das am Montag, wenn ich wieder arbeiten muss mal ausprobieren. Und nein, in der Spalte LANDUERZEL oder ISO_CODE kann nicht der ganze Ländername stehen, ich will nur erreichen, dass egal was in das Suchfeld eingegeben wird, alle Spalten nach dem Suchtext durchsucht werden.
dr.dimitri Geschrieben 7. Februar 2009 Geschrieben 7. Februar 2009 Um welche Datenbank handelt es sich denn? Evtl. kannst Du mal probieren, ob eine geinsame Volltextindizierung der drei Spalten möglich ist. Dann kannst dir das sparen und bist sogar noch flexibler in deinen Suchmöglichkeiten. Dim
bnA Geschrieben 9. Februar 2009 Autor Geschrieben 9. Februar 2009 Hallo guten Morgen, bin wieder auf der Arbeit. Also die Suche ist nur erfolgreich, wenn ich nach dem LAND_ISO_CODE_3 aus der Tabelle VLAND001 suche. Bei der Suche nach anderen Spalten liefert er mir wie gesagt dieses komische Ergebnis zurück, weiß nciht ob man das dieses kartesische Produkt nennt. Was genau ist diese Volltextindizierung und wie funktioniert das? Bin nicht so der Crack in Datenbankprogrammierung, werde aber schonmal danach suchen. Bin aber trotzdem über Antworten dankbar. Schönen Start in die Woche wünsche ich
Amstelchen Geschrieben 9. Februar 2009 Geschrieben 9. Februar 2009 nachdem sich die anderen threads jetzt alle um DB2 drehten, vermute ich mal das bnA, das sollte allerdings nochmals bestätigt werden. s'Amstel
bnA Geschrieben 9. Februar 2009 Autor Geschrieben 9. Februar 2009 Achso ja, es handelt sich um eine DB2 Datenbank
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden