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.

SQL: Wenn WHERE-Klausel kein Ergebnis liefert alle Daten ausgeben

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich habe ein kleines Problem.. Ich möchte mir alle Kunden ausgeben lassen, die in einer bestimmten Liste sind. Die ListenID wird als Parameter übergeben. Wenn ich jetzt keine ListenID übergebe, sprich '' sollen alle Kunden aufgelistet werden. Könnt ihr mir weiterhelfen?

SELECT 

    Name,

    Vorname, 

    Geburtsdatum,

    ListenID

FROM

    Kunde    

WHERE

    ListenID = :Liste

Danke und LG

Die OR Bedingung ist nicht richtig. Je nach DB wird nach einem Leerstring gesucht oder nach NULL. Da NULL nie gleich einem bestimmten Wert ist, hilft das hier nicht weiter.

Die einfachste Möglichkeit ist, die WHERE Bedingung wegzulassen. Sprich bei einem fehlenden Parameter ein zweites, passendes SQL aufzurufen.

Dim

Wenn ich jetzt keine ListenID übergebe, sprich '' sollen alle Kunden aufgelistet werden.

Ich habe mich strikt daran gehalten, was Kurze5 über eine leere ListenID gesagt hat. Ich kenne die Struktur der Datenbank - insbesondere den Datentyp von ListenID (Zeichenkette oder numerisch) - nicht, daher hab ich das nur so umgesetzt wie beschrieben. Ich habe da rausgelesen, dass :Liste im beschriebenen Fall mit '' belegt wird und dann alle Zeilen angezeigt werden.

Der Ausdruck

:Liste = ''
wird bei Übergabe von '' an Liste zu
'' = ''

, was immer trueergibt. Wird das mit der anderen Bedingung OR-verknüpft ergibt es auch immer true und damit wird die ganze Liste ausgegeben. Falls ich das jetzt immer noch falsch verstanden haben soll, ziehe ich mich aus der Diskussion zurück.

Der Ausdruck

:Liste = ''
wird bei Übergabe von '' an Liste zu
'' = ''
, was immer trueergibt. Wird das mit der anderen Bedingung OR-verknüpft ergibt es auch immer true und damit wird die ganze Liste ausgegeben.
Grundsätzlich ist der Ansatz richtig, wenn die DB '' wirklich als Leerstring - also einen String mit der Länge 0 Byte ansieht. Für Oracle z.B. ist ein '' aber NULL. Damit würde im SQL stehen
NULL = NULL
Da NULL immer ein undefinierter Wert ist, ist der Vergleich immer false - es wird also kein einziger Wert zurückgeliefert :cool: Kleines Beispiel:
SQL> select count(*) from all_objects where ''='';


  COUNT(*)

----------

         0


SQL> select count(*) from all_objects where 1=1;


  COUNT(*)

----------

     55677


SQL> select count(*) from all_objects where NULL IS NULL;


  COUNT(*)

----------

     55677


SQL>

Dim

Ja, genau ich meinte, wenn ich keine ListenID eingebe, also ein leerer Parameter übergeben wird, soll die WHERE-Klausel nicht greifen.

aber das von Leimy84 hat funktioniert :)

Danke

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.