Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[DB] SELECT Abfrage

Empfohlene Antworten

Veröffentlicht

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:

deutx7.png

Wenn ich z.B. nach Österreich suche, was in der 2. Spalte stehen sollte bekomme ich folgende Ausgabe:

sterreichgl2.png

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:

72027201pm1.png

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 :)

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

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...

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 von bnA

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

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.

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

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

nachdem sich die anderen threads jetzt alle um DB2 drehten, vermute ich mal das ;)

bnA, das sollte allerdings nochmals bestätigt werden.

s'Amstel

Achso ja, es handelt sich um eine DB2 Datenbank :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.