Ich hatte eine Abfrage (für Postgres und Informix) mit einem NOT IN
-Klausel, die eine Unterabfrage enthält, die in einigen Fällen NULL
-Werte zurückgibt, was dazu führt, dass diese Klausel (und die gesamte Abfrage) nichts zurückgibt.
Was ist der beste Weg, dies zu verstehen? Ich dachte an NULL
als etwas ohne Wert und erwartete daher nicht, dass die Abfrage fehlschlagen würde, aber offensichtlich ist das nicht die richtige Art, an NULL
zu denken.
Boolesche Logik - oder Dreiwertige Logik
x NOT IN (1, 2, NULL)
ist dasselbe wie NOT (x = 1 OR x = 2 OR x = NULL)
x <> 1 AND x <> 2 AND x <> NULL
true AND true AND unknown
**unknown
**false
, da es die Bedingung WHERE
nicht erfüllt **Aus diesem Grund verwenden die Leute EXISTS
+ NOT EXISTS
statt IN
+ NOT IN
. Siehe auch Die Verwendung von NOT-Logik in Bezug auf Indizes für mehr
** Hinweis: unknown
ist dasselbe wie false
am Ende eines Ausdrucks in einer WHERE
Bedingung.
Während der Ausdruck ausgewertet wird, ist er unbekannt
Siehe @ kgrittns Kommentar unten, warum