Fehlerbehebung bei einem MySQL-Abfragefehler „NOT IN“
Ein Benutzer ist kürzlich beim Versuch einer scheinbar einfachen MySQL-Abfrage auf einen Syntaxfehler gestoßen. Das Ziel bestand darin, alle Zeilen aus Table1
auszuwählen, in denen der Spaltenwert principal
in Table2
nicht vorhanden ist. Die ursprüngliche, falsche Abfrage lautete:
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal</code>
Dadurch wurde ein Fehler generiert, der den Benutzer aufgrund widersprüchlicher Online-Ratschläge zu der Annahme veranlasste, dass MySQL NOT IN
-Klauseln möglicherweise nicht unterstützt. Einige Quellen schlugen komplexe Problemumgehungen vor.
MySQL unterstützt zwar NOT IN
, aber die oben verwendete Syntax war fehlerhaft. Die korrekte Syntax erfordert eine Unterabfrage:
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM Table2)</code>
Diese überarbeitete Abfrage verwendet eine Unterabfrage (SELECT principal FROM Table2)
, um den Satz von principal
-Werten aus Table2
explizit zu definieren. MySQL vergleicht dann jeden Table1.principal
-Wert korrekt mit diesem Satz und gibt nur Zeilen zurück, in denen keine Übereinstimmung gefunden wird.
Der ursprüngliche Fehler resultierte ausschließlich aus einer falschen Anwendung des NOT IN
-Operators. Die Einbeziehung der Unterabfrage stellt die notwendige Struktur für die Datenbank bereit, um die Abfrage erfolgreich auszuführen und die erwarteten Ergebnisse zu liefern.
Das obige ist der detaillierte Inhalt vonWarum schlägt meine MySQL-Abfrage „NOT IN' fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!