Veröffentlicht 6. Februar 200916 j 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
6. Februar 200916 j 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
6. Februar 200916 j 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...
6. Februar 200916 j 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 200916 j von bnA
6. Februar 200916 j 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
7. Februar 200916 j 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.
7. Februar 200916 j 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
9. Februar 200916 j 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
9. Februar 200916 j nachdem sich die anderen threads jetzt alle um DB2 drehten, vermute ich mal das bnA, das sollte allerdings nochmals bestätigt werden. s'Amstel
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.