Heim >Datenbank >MySQL-Tutorial >Wie wirken sich NULL-Werte auf das Ergebnis einer NOT IN-Klausel aus?

Wie wirken sich NULL-Werte auf das Ergebnis einer NOT IN-Klausel aus?

DDD
DDDOriginal
2025-01-23 12:47:10464Durchsuche

How Do NULL Values Affect the Outcome of a NOT IN Clause?

NULL-Werte und die NOT IN-Klausel verstehen

Inkonsistenzen treten häufig bei der Verwendung von NOT IN-Klauseln im Vergleich zu LEFT JOINs 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn