MYSQL SELECT
Otto Normalverbraucher
- sql
Hallo,
SELECT * FROM lieferschein WHERE (STATUS != 'ok' AND LIEFART ='2') OR (STATUS!= 'ok' AND LIEFART = '3')
Seltsamer Weise klappt die Abfrage nur, wenn STATUS leer ist, steht da (NULL) erfolgt kein Treffer.
Ich steh total auf dem Schlauch.
PS: Die Datenbank "MariaDB Version 10.2.6" auf Win 10Pro
Tach!
Seltsamer Weise klappt die Abfrage nur, wenn STATUS leer ist, steht da (NULL) erfolgt kein Treffer.
NULL ist ein besonderer Wert, mit dem man nicht rechnen oder vergleichen kann. Wann immer NULL einer der Werte einer Operation ist, ist das Ergebnis NULL. Und da NULL im booleschen Kontext zu false evaluiert, kann ein Test mit NULL-Werten nicht zu true werden. Für Tests mit NULL ist der spezielle Operator IS NULL
oder IS NOT NULL
zu verwenden. Außerdem gibt es auch Funktionen, die mit NULL-Werten umgehen können. Die heißen meist was mit NULL im Namen.
dedlfix.
Hallo
SELECT * FROM lieferschein WHERE (STATUS != 'ok' AND LIEFART ='2') OR (STATUS!= 'ok' AND LIEFART = '3')
Abgesehen von den Besonderheiten im Umgang mit NULL
, auf die @dedlfix schon eingegangen ist, lässt sich der Query auch noch weiter vereinfachen. Solange du einheitlich auf den Aus- oder den Einschluss von Werten prüfen willst, kannst du IN()
beziehungsweise NOT IN()
für den Vergleich benutzen. Hier könntest du also die Prüfung auf andere Werte als '2'
oder '3'
mit LIEFART NOT IN('2', '3')
(oder LIEFART NOT IN(2, 3)
), falls das als Datentyp doch Zahlen sein sollten) vornehmen.
SELECT *
FROM lieferschein
WHERE (STATUS != 'ok' OR STATUS IS NULL)
AND LIEFART NOT IN('2', '3')
Tschö, Auge
Hallo Auge,
LIEFART NOT IN('2', '3')
Ich denke, da ist ein NOT zu viel.
Rolf
Hallo
LIEFART NOT IN('2', '3')
Ich denke, da ist ein NOT zu viel.
Öhhm, ja, Fehlinterpretation.
SELECT *
FROM lieferschein
WHERE (STATUS != 'ok' OR STATUS IS NULL)
AND LIEFART IN('2', '3')
Tschö, Auge
Danke!!! Löbbt!