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

So ändern Sie schnell das Hostattribut eines MySQL-Benutzers

Wenn Sie sich remote bei MySQL anmelden, gelten f...

Eine kurze Analyse, wie MySQL die Transaktionsisolierung implementiert

Inhaltsverzeichnis 1. Einleitung 2. RC- und RR-Is...

JavaScript-Datenvisualisierung: ECharts-Kartenerstellung

Inhaltsverzeichnis Überblick Vorsichtsmaßnahmen 1...

Schreiben Sie ein MySQL-Datensicherungsskript mithilfe der Shell

Ideen Eigentlich ist es ganz einfach Schreiben Si...

Detaillierte Analyse der MySQL-Indizes

Vorwort Wir wissen, dass die Indexauswahl Aufgabe...

Detaillierte Erklärung der CSS3-Animation und der neuen Funktionen von HTML5

1. CSS3-Animation ☺CSS3-Animationen sind viel ein...

Installations-Tutorial zur dekomprimierten Version von MySQL5.7.21 unter Win10

Installieren Sie die entpackte Version von Mysql ...

So rufen Sie das Kennwort für MySQL 8.0.22 auf dem Mac ab

Neueste Version von MySQL 8.0.22 zur Kennwortwied...

JavaScript-Objekte (Details)

Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...

Verständnis des synchronen oder asynchronen Problems von setState in React

Inhaltsverzeichnis 1. Ist setState synchron? asyn...

Anwendungsszenario für die MySQL-Konfiguration mehrerer Instanzen

Inhaltsverzeichnis Mehrere MySQL-Instanzen Übersi...