Heim > Datenbank > MySQL-Tutorial > Warum führen NULL-Werte mit der NOT IN-Klausel von SQL zu unerwarteten Ergebnissen?

Warum führen NULL-Werte mit der NOT IN-Klausel von SQL zu unerwarteten Ergebnissen?

Mary-Kate Olsen
Freigeben: 2025-01-23 12:31:09
Original
877 Leute haben es durchsucht

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

Das unerwartete Verhalten von NULL-Werten und der NOT IN-Klausel in SQL verstehen

SQL-Abfragen führen oft zu überraschenden Ergebnissen, wenn NULL-Werte mit dem NOT IN-Operator interagieren. Diese Diskrepanz wird deutlich, wenn eine NOT IN-Abfrage mit einer äquivalenten Abfrage unter Verwendung eines LEFT JOIN.

verglichen wird

Bedenken Sie diese Fragen:

<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 gibt ein Ergebnis zurück, Abfrage B jedoch nicht. Die Hauptursache liegt darin, wie unterschiedliche SQL-Datenbanken NULL-Werte verarbeiten.

Wenn ANSI_NULLS aktiviert ist (die Standardeinstellung in vielen Systemen wie SQL Server 2005), wird jeder Vergleich mit NULL, wie z. B. 3 = NULL, als UNKNOWN ausgewertet. Diese Unbestimmtheit ergibt sich aus der inhärenten Unsicherheit von NULL.

In Abfrage B trifft der NOT IN-Operator auf NULL in der Unterabfrage, was zu einer UNKNOWN-Auswertung führt. Da keine anderen Werte übereinstimmen, wird das gesamte Prädikat zu UNKNOWN, was eine leere Ergebnismenge ergibt.

Umgekehrt verändert die Deaktivierung von ANSI_NULLS das Verhalten. Wenn ANSI_NULLS deaktiviert ist, wird 3 = NULL zu TRUE ausgewertet. SQL interpretiert NULL als potenziell gleich mit allem, einschließlich sich selbst. Folglich ergibt das Prädikat von Abfrage B TRUE und gibt ein Ergebnis zurück.

Kurz gesagt, die inkonsistenten Ergebnisse sind auf die unterschiedliche Behandlung von NULL-Werten zurückzuführen, die durch die ANSI_NULLS-Einstellung bestimmt werden. Wenn ANSI_NULLS aktiviert ist, erzeugen Vergleiche mit NULL UNKNOWN, was zu unerwarteten Ergebnissen bei Abfragen führt, die NOT IN- und NULL-Werte verwenden. Dies unterstreicht, wie wichtig es ist, die NULL-Behandlung in SQL für genaue Abfrageergebnisse zu verstehen.

Das obige ist der detaillierte Inhalt vonWarum führen NULL-Werte mit der NOT IN-Klausel von SQL zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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