Lösen Sie das Problem, dass bei der Set-Operation kein NULL gefunden wird, nicht wie bei MySQL

Lösen Sie das Problem, dass bei der Set-Operation kein NULL gefunden wird, nicht wie bei MySQL

Eine interessante Entdeckung:

Es gibt eine Tabelle mit insgesamt 1000 Datensätzen. Nun gibt es eine Abfrageanweisung:

#Abfrageanweisung 1
#Suchen Sie die Felder in der Tabelle, deren ID ,A‘ oder ,B‘ oder ,C‘ enthält. Wählen Sie * aus Tabelle1, wo die ID wie ,%A%‘ oder ,%B%‘ oder ,%C%‘ ist.
#300 Ergebnisse wurden erfolgreich gefunden

Also, die Abfrage ist normal, es gibt 300 Datensätze.

Dann habe ich die Abfrage wahllos noch einmal eingegeben...:

#Abfrageanweisung 2
#Suchen Sie die Felder in der Tabelle, deren ID nicht ‚A‘, ‚B‘ oder ‚C‘ enthält. Wählen Sie * aus Tabelle1 aus, wo die ID nicht wie ‚%A%‘ und die ID nicht wie ‚%B%‘ und die ID nicht wie ‚%C%‘ ist.
#400 Ergebnisse wurden erfolgreich gefunden

Also, wir haben 400 Artikel gefunden … was? ! Nur 400? ? Sollten es nicht 700 sein? ! !

Ich wurde vom Blitz getroffen – was war los? ?

Logischerweise sollte „Suche die Felder in der Tabelle, deren ID ‚A‘ oder ‚B‘ oder ‚C‘ enthält“ gleichbedeutend sein mit „Suche die Felder in der Tabelle, deren ID nicht ‚A‘, ‚B‘ oder ‚C‘ enthält“! Dies wird durch Mengenoperationen ermittelt!

"Suchen Sie die Felder in der Tabelle, die 'A' oder 'B' oder 'C' in ihrer ID haben" >> betrachten Sie es als >> A∪B∪C

"Suchen Sie die Felder in der Tabelle, deren ID nicht ‚A‘, ‚B‘ oder ‚C‘ enthält" >> betrachten Sie es als >> ∁UA∩∁UB∩∁UC

Gemäß den Operationsregeln wissen wir jedoch, dass: ∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC

Das heißt, sollten die Ergebnisse der beiden Abfrageanweisungen nicht komplementär sein? ? Theoretisch müsste die Summe der Zeilen 1000 ergeben, warum fehlen jetzt 300?

Das ist seltsam. Was ist schiefgelaufen? ?

Ändern Sie also die Abfrageanweisung:

#Abfrageanweisung 3
#Suchen Sie die Felder in der Tabelle, deren ID nicht ‚A‘ oder ‚B‘ oder ‚C‘ enthält. Wählen Sie * aus Tabelle1 aus, wo die ID nicht enthalten ist (wählen Sie * aus Tabelle1 aus, wo die ID wie ‚%A%‘ oder ‚%B%‘ oder ‚%C%‘ ist);
#700 Ergebnisse wurden erfolgreich gefunden

Hä? ? Wie können wir auf diese Weise den komplementären Satz der Abfrageanweisung 1 finden?

Ich habe die Ergebnisse von Abfrageanweisung 2 und Abfrageanweisung 3 verglichen und festgestellt, dass es sich bei den 300 fehlenden Datensätzen um diejenigen handelte, bei denen die ID NULL war!

Mit anderen Worten, nicht so, dass „%A%“ keine NULL-Datensätze finden kann!

Nach dem Verständnis stellten wir Folgendes fest:

Weiteres Detailwissen gefunden ~

Ergänzung: Beachten Sie, dass das zurückgegebene Abfrageergebnis immer leer ist, wenn der nicht im Abfragewert von MySQL enthaltene Nullwert vorhanden ist

Nun ist die Datenbanktabelle

Wenn wir die folgende Abfrage verwenden:

Wählen Sie * vom Benutzer aus
wobei der Benutzername nicht in 
(
Benutzernamen auswählen 
vom Benutzer
wobei id != 2
)

Zu diesem Zeitpunkt enthält das Ergebnis der Unterabfrage Nullwerte, sodass das Ergebnis immer eine leere Abfrage statt der erwarteten Zeile mit der ID 2 zurückgibt.

Wir können die Abfrage leicht modifizieren:

Wählen Sie * vom Benutzer aus
wobei der Benutzername nicht in 
(
Benutzernamen auswählen 
vom Benutzer
wobei ID != 2 und Benutzername nicht null ist
)

Durch Ausschließen der leeren Benutzernamenspalte können Sie zu diesem Zeitpunkt das erwartete Ergebnis erzielen.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Warum sollten MySQL-Felder NOT NULL verwenden?
  • Lösen Sie das Problem, dass MySQL „not in“ verwendet, um Nullwerte einzuschließen
  • Detaillierte Erklärung des Unterschieds zwischen MySQL null und nicht null und null und leerem Wert''''''''
  • Detaillierte Erklärung zur Verwendung von NULL und NOT NULL beim Erstellen von Tabellen in MySQL
  • Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL
  • Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?
  • MySQL-Abfrage für leere oder nicht leere Felder (ist null und nicht null)
  • mysql nicht drin, linker Join, IST NULL, EXISTIERT NICHT Effizienzproblem-Datensatz
  • Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls

<<:  Docker-Installation und Bereitstellung einer Analyse des Net Core-Implementierungsprozesses

>>:  Implementierungsschritte von vue-element-admin zum Erstellen eines Backend-Verwaltungssystems

Artikel empfehlen

Absteigender Index in MySQL 8.0

Vorwort Ich glaube, jeder weiß, dass Indizes geor...

Erläuterung unveränderlicher Werte in React

Inhaltsverzeichnis Was sind unveränderliche Werte...

Achten Sie bei der Webseitenerstellung auf die Verwendung von HTML-Tags

HTML hat versucht, sich von der Präsentation weg ...

VMware ESXi 5.5 Bereitstellungs- und Konfigurationsdiagrammprozess

Inhaltsverzeichnis 1. Installationsvoraussetzunge...

Beispielerklärung für Ausführungskontext und Ausführungsstapel in JavaScript

JavaScript - Prinzipienreihe Wenn wir in der tägl...

Einige Punkte, auf die wir beim Entwurf einer Webseite achten sollten

Webdesign: Je nach persönlichen Vorlieben und Inha...

JavaScript, um den Effekt des Tab-Leistenwechsels zu erzielen

Registerkartenleiste: Klicken Sie auf verschieden...

Tutorial-Diagramm zur Konfiguration der Tomcat-Umgebungsvariablen unter Win10

Vor der Konfiguration müssen wir Folgendes tun: 1...

Detaillierte Erklärung der HTML-Formularelemente (Teil 1)

HTML-Formulare werden verwendet, um verschiedene ...

Detaillierte Erklärung der Kodierungsprobleme bei MySQL-Befehlszeilenoperationen

1. Überprüfen Sie die MySQL-Datenbankkodierung my...

Centos6.9-Installation Mysql5.7.18 Schrittaufzeichnung

Installationsreihenfolge rpm -ivh mysql-community...