SQLs NOT IN
-Klausel und die Nuancen von NULL-Werten
Eine häufige Herausforderung in SQL besteht darin, Daten mit einem Wertesatz zu vergleichen, insbesondere wenn NULL-Werte vorhanden sind. Lassen Sie uns dies anhand einiger Beispielabfragen untersuchen:
<code class="language-sql">A: SELECT 'true' WHERE 3 IN (1, 2, 3, NULL); B: SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>
Abfrage A liefert ein Ergebnis, Abfrage B jedoch nicht. Dieses Verhalten ist darauf zurückzuführen, wie SQL NULL-Werte innerhalb der NOT IN
-Klausel verarbeitet.
In SQL bedeutet NULL einen unbekannten oder fehlenden Wert. Seine Interaktion mit Prädikaten wie IN
und NOT IN
wird durch die Einstellung ANSI_NULLS
geregelt.
Wenn ANSI_NULLS
aktiviert ist (Standardeinstellung), werden Vergleiche mit NULL als UNBEKANNT ausgewertet, es sei denn, dies wird explizit mit IS NULL
oder IS NOT NULL
überprüft.
In Abfrage A führt der Vergleich von 3 mit einer Liste mit NULL zu einer TRUE-Bewertung, da 3 vorhanden ist. Der NULL-Wert hat keinen Einfluss auf das Gesamtergebnis.
Abfrage B verwendet jedoch NOT IN
. Da ANSI_NULLS
aktiviert ist, wird der Vergleich 3 NOT IN (1, 2, NULL)
aufgrund des Vergleichs zwischen 3 und NULL als UNBEKANNT ausgewertet. Folglich gibt die Abfrage eine leere Menge zurück.
Das Deaktivieren von ANSI_NULLS
ändert dies. NULL-Werte werden wie jeder andere Wert behandelt. In diesem Szenario würde 3 NOT IN (1, 2, NULL)
als TRUE ausgewertet, da 3 sich von 1, 2 und NULL unterscheidet. Daher würde Abfrage B ein Ergebnis liefern, bei dem ANSI_NULLS
deaktiviert ist.
Dies unterstreicht die Bedeutung der Einstellung ANSI_NULLS
beim Umgang mit NULL-Werten in SQL. Durch die Verwaltung dieser Einstellung steuern Sie das Prädikatverhalten mit NULL-Werten und erhalten die gewünschten Abfrageergebnisse.
Das obige ist der detaillierte Inhalt vonWarum gibt „NOT IN' unerwartete Ergebnisse mit NULL-Werten in SQL zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!