Heim > Datenbank > MySQL-Tutorial > Warum gibt „NOT IN' unerwartete Ergebnisse mit NULL-Werten in SQL zurück?

Warum gibt „NOT IN' unerwartete Ergebnisse mit NULL-Werten in SQL zurück?

Susan Sarandon
Freigeben: 2025-01-23 12:36:12
Original
815 Leute haben es durchsucht

Why Does `NOT IN` Return Unexpected Results with NULL Values in SQL?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage