Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL

Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL

Als ich vor einiger Zeit an einer kleinen Funktion in der Firma arbeitete, zählte ich, wie viele Daten in einer bestimmten Situation vorhanden waren, und modifizierte dann das Problem. Es schien damals sehr einfach, also schrieb ich das folgende SQL:

SELECT COUNT(*) FROM t1, wobei tl.c1 nicht IN (SELECT t2.c1 FROM t2) ist;

Das erwartete Ergebnis lautet: Wie viele Daten befinden sich in t1 und nicht in t2? Das Ergebnis lautet: 0, d. h. alle Daten in t1 befinden sich in t2. Es lässt sich jedoch leicht feststellen, dass einige Daten in t1, aber nicht in t2 vorhanden sind, was sich sehr seltsam anfühlt. Dieses SQL scheint in Ordnung zu sein. Nach einiger Suche stellt sich heraus, dass das Feld c1 von t2 einen Nullwert enthält. Eine Änderung in die folgenden beiden Formen kann das erwartete Ergebnis erzielen:

Wählen Sie Count(*) aus t1 links, Join t2 auf t1.c1 = t2.c1, wobei t2.c1 NULL oder t2.c1 = '' ist;

oder

wähle COUNT(*) aus t1, wobei t1.c1 nicht in (
wähle t2.c1 aus t2, wobei t2.c1 nicht null ist UND t2.c1 != ''
);

Es liegt also alles an null (ich habe auch den leeren String hinzugefügt, um Fehler zu vermeiden). Der Grund dafür ist, dass das Implementierungsprinzip von not in darin besteht, jedes t1.c1 mit jedem t2.c1 (die Abfrageergebnisse in den Klammern) auf Ungleichheit (!=) zu vergleichen.

für jedes c1 in t2:
wenn t1.c1 != c1:
weitermachen
anders:
return false
returniere wahr

In SQL ist jedes Operationsergebnis von !=null falsch. Wenn also in t2 ein Nullwert vorhanden ist, gibt die Abfrage von „not in“ immer „false“ zurück, d. h. das Abfrageergebnis ist leer.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der NULL-Werte in MySQL
  • Detaillierte Erläuterung zum Beispiel der MySQL-NULL-Wertverarbeitung
  • MySQL NULL-Datenkonvertierungsmethode (unbedingt lesen)
  • MySQL-Reihe von Erfahrungszusammenfassungen und Analyse-Tutorials zu NULL-Werten

<<:  Das WeChat-Applet erkennt den Effekt des Wischens nach links zum Löschen von Listenelementen

>>:  Verwenden einer MySQL-Datenbank im Docker, um LAN-Zugriff zu erhalten

Artikel empfehlen

Schritte zur Methode „Mysql-Abfragedatenbankkapazität“

Abfrage der Gesamtgröße aller Datenbanken So geht...

Eine kurze Erläuterung temporärer MySQL-Tabellen und abgeleiteter Tabellen

Abgeleitete Tabellen Wenn die Hauptabfrage eine a...

Zusammenfassung einiger verwandter Vorgänge geplanter Linux-Aufgaben

Ich habe verschiedene große Websites durchsucht u...

Informationen zu VUEs Kompilierungsumfang und Slotumfang-Slotproblemen

Was sind Slots? Die Slot-Direktive ist v-slot, di...

Wie gestaltet man eine Webseite? Wie erstelle ich eine Webseite?

Wenn es um das Verständnis von Webdesign geht, sc...

Tutorial zum schnellen Bereitstellen von Clickhouse mit Docker-Compose

ClickHouse ist ein spaltenorientiertes Open-Sourc...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...

Erklären, wie die SQL-Effizienz analysiert wird

Der Befehl „Explain“ ist der erste empfohlene Bef...

Praktische Methode zum Löschen verknüpfter Tabellen in MySQL

In der MySQL-Datenbank können Tabellen, nachdem s...

Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank

Isolationsebene für Datenbanktransaktionen Es gib...

Implementierung einer Suchfeldfunktion mit Suchsymbol basierend auf HTML-CSS

Vorwort Ich möchte Ihnen zeigen, wie Sie ein Such...