Zum Inhalt springen

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


Kurze5

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...