bnA Geschrieben 6. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bnA Geschrieben 6. Februar 2009 Autor Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bnA Geschrieben 6. Februar 2009 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 6. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bnA Geschrieben 7. Februar 2009 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 7. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bnA Geschrieben 9. Februar 2009 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
allesweg Geschrieben 9. Februar 2009 Teilen Geschrieben 9. Februar 2009 Das kommt auf das DBMS an... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 9. Februar 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bnA Geschrieben 9. Februar 2009 Autor Teilen Geschrieben 9. Februar 2009 Achso ja, es handelt sich um eine DB2 Datenbank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.