Heim >Datenbank >MySQL-Tutorial >Wie wirken sich NULL-Werte auf das Ergebnis einer NOT IN-Klausel aus?
NULL-Werte und die NOT IN
-Klausel verstehen
Inkonsistenzen treten häufig bei der Verwendung von NOT IN
-Klauseln im Vergleich zu LEFT JOIN
s auf, insbesondere beim Umgang mit NULL
-Werten. Lassen Sie uns dies anhand von zwei Beispielabfragen untersuchen:
Abfrage A:
<code class="language-sql">SELECT 'true' WHERE 3 IN (1, 2, 3, NULL);</code>
Abfrage B:
<code class="language-sql">SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>
Abfrage A liefert ein Ergebnis, Abfrage B jedoch nicht. Dieser Unterschied ergibt sich aus der Art und Weise, wie SQL Vergleiche mit NULL
-Werten verarbeitet.
Analyse der Abfragen
Lassen Sie uns jede Abfrage aufschlüsseln, um das Verhalten zu verstehen:
Abfrage A:
Diese Abfrage kann wie folgt vereinfacht werden:
<code class="language-sql">SELECT 'true' WHERE 3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL;</code>
Da 3 = 3
als TRUE
ausgewertet wird, gibt die Abfrage ein Ergebnis zurück.
Abfrage B:
Diese Abfrage vereinfacht sich zu:
<code class="language-sql">SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;</code>
Wenn ANSI_NULLS
aktiviert ist (die Standardeinstellung in den meisten SQL-Datenbanken), wird 3 != NULL
zu UNKNOWN
ausgewertet. Eine AND
-Bedingung mit UNKNOWN
führt dazu, dass das gesamte Prädikat UNKNOWN
ist, was dazu führt, dass keine Zeilen zurückgegeben werden.
Wenn ANSI_NULLS
deaktiviert ist, wird 3 != NULL
zu TRUE
ausgewertet und gibt möglicherweise eine Zeile zurück.
Fazit
Das Vorhandensein von NULL
-Werten innerhalb einer NOT IN
-Klausel wirkt sich aufgrund der dreiwertigen Logik von SQL (TRUE, FALSE, UNKNOWN) und der Einstellung von ANSI_NULLS
erheblich auf die Abfrageergebnisse aus. Es ist wichtig, sich dieses Verhaltens bewusst zu sein, wenn Sie mit NULL
-Werten arbeiten, um unerwartete Ergebnisse zu vermeiden. Die Verwendung von LEFT JOIN
- und IS NULL
-Prüfungen stellt in solchen Szenarien häufig eine zuverlässigere Alternative für die Verarbeitung von NULL
-Werten dar.
Das obige ist der detaillierte Inhalt vonWie wirken sich NULL-Werte auf das Ergebnis einer NOT IN-Klausel aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!