Es gibt zumindest ein paar mögliche Gründe, warum Sie den gefürchteten Fehler 1064 (42000) erhalten könnten, der lautet:„Sie haben einen Fehler in Ihrer SQL-Syntax …“ usw., wenn Sie versuchen, den MINUS
zu verwenden Operator in MariaDB.
Ich werde diese unten untersuchen und einige Lösungen anbieten.
Beispiel für den Fehler
Hier ist ein Codebeispiel, das den Fehler verursacht:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Ergebnis:
ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von „SELECT StudentName FROM Students“ in Zeile 3 zu verwenden
Normalerweise wird dieser Fehler erzeugt, wenn Sie einen Fehler in Ihrem Code haben. Wie es ausdrücklich heißt:„Sie haben einen Fehler in Ihrer SQL-Syntax“.
Das ist hier aber nur eine von mehreren Möglichkeiten.
In meinem Fall gibt es keinen Fehler in meiner Syntax. Es muss einen anderen Grund geben.
Nachfolgend finden Sie einige mögliche Gründe für diesen Fehler und Vorschläge zur Behebung der einzelnen Fehler.
Lösung 1
Als erstes das MINUS
Operator wurde in MariaDB 10.6.1 eingeführt. Wenn Sie also eine frühere Version von MariaDB ausführen, wird der MINUS
Operator wird für Sie nicht funktionieren.
Aktualisieren Sie in diesem Fall Ihre MariaDB-Installation auf die neueste Version (oder zumindest eine Version nicht vor 10.6.1).
Lösung 2
Zweitens das MINUS
Operator funktioniert nur im Oracle-Modus. Obwohl dies in der Dokumentation von MariaDB nicht explizit erwähnt wird, ist es in der Aufgabe zum Implementieren des MINUS
impliziert Operator in MariaDB.
Wenn Sie bereits MariaDB 10.6.1 oder höher ausführen, müssen Sie in den Oracle-Modus wechseln, bevor Sie MINUS
verwenden Betreiber.
Führen Sie daher den folgenden Code aus, bevor Sie mit der Verwendung von MINUS
beginnen Betreiber:
SET sql_mode = "oracle";
Jetzt sollten Sie in der Lage sein, den MINUS
zu verwenden Operator in Ihrem Code.
Lösung 3
Wenn Sie alle oben genannten Schritte ausgeführt haben, aber immer noch eine Fehlermeldung erhalten, ist es möglich, dass es wirklich eine gibt ein Fehler in deiner Syntax.
Ich führe beispielsweise MariaDB 10.6.1 im Oracle-Modus aus, aber der folgende Code erzeugt den Fehler:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Ergebnis:
ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, um die richtige Syntax für die Verwendung in der Nähe von „MINUS“ zu findenIn diesem Fall habe ich versehentlich ein Semikolon nach dem ersten
SELECT
eingefügt Aussage, was ein häufiger Fehler ist. Um dies zu beheben, würde ich einfach das erste Semikolon entfernen:SELECT TeacherName FROM Teachers MINUS SELECT StudentName FROM Students;
Ergebnis:
+-------------+| Name des Lehrers |+-------------+| Ben || Cathy |+-------------+Erfolg!
Lösung 4
Wenn Sie alle oben genannten Lösungen ausprobiert haben, aber immer noch eine Fehlermeldung erhalten, ist es vielleicht an der Zeit,
EXCEPT
zu verwenden Operator. DasMINUS
Operator ist ein Synonym fürEXCEPT
, also verwenden beide die gleiche Syntax und geben das gleiche Ergebnis zurück.SELECT TeacherName FROM Teachers EXCEPT SELECT StudentName FROM Students;
Ergebnis:
+-------------+| Name des Lehrers |+-------------+| Ben || Cathy |+-------------+Lösung 5
Wenn Sie jetzt nichts mit
MINUS
zu tun haben möchten oderEXCEPT
, es gibt noch eine andere Option.Sie können eine Unterabfrage wie die folgende verwenden, um dasselbe Ergebnis zurückzugeben:
SELECT DISTINCT TeacherName FROM Teachers t WHERE NOT EXISTS (SELECT StudentName FROM Students s WHERE t.TeacherName = s.StudentName);
Offensichtlich hängt die genaue Abfrage, die Sie verwenden, von Ihrem Schema und Ihren Daten ab.