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

JavaScript implementiert die H5-Goldmünzenfunktion (Beispielcode)

Heute habe ich eine Aktivität für einen roten Ums...

UTF-8- und GB2312-Webkodierung

In letzter Zeit haben mich viele Studenten zur Ko...

Beispiel-Tutorial für MySQL-Datenbanktransaktionen

Inhaltsverzeichnis 1. Was ist eine Transaktion? 2...

Detaillierter Prozess zum Zeichnen dreidimensionaler Pfeillinien mit three.js

Nachfrage: Diese Nachfrage ist ein dringender Bed...

VMware Workstation ist nicht mit Device/Credential Guard kompatibel

Beim Installieren einer virtuellen Maschine wird ...

Miniprogramm zur Implementierung des kompletten Einkaufswagens

Das Miniprogramm implementiert einen vollständige...

Beispiel für die Einrichtung eines mehrspaltigen Layouts gleicher Höhe mit CSS

Mehrere Spalten haben zunächst unterschiedliche I...

So bedienen Sie das Kontrollkästchen auf einer HTML-Seite

Kontrollkästchen sind auf Webseiten sehr verbreit...

setup+ref+reactive implementiert Vue3-Reaktionsfähigkeit

Das Setup wird zum Schreiben kombinierter APIs ve...

Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang

Durch Hinzufügen des Schlüsselworts extra_hosts i...