MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Fehler 1064 (42000) behoben, wenn der MINUS-Operator in MariaDB verwendet wird

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 finden 

In 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. Das MINUS Operator ist ein Synonym für EXCEPT , 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 oder EXCEPT , 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.