Det finns åtminstone några möjliga anledningar till att du kan få det fruktade felet 1064 (42000) som lyder "Du har ett fel i din SQL-syntax..." etc när du försöker använda MINUS
operatör i MariaDB.
Jag ska utforska dessa nedan och erbjuda några lösningar.
Exempel på felet
Här är ett exempel på kod som orsakar felet:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT StudentName FROM Students' at line 3
Normalt uppstår detta fel när du har ett fel i din kod. Som det uttryckligen står "Du har ett fel i din SQL-syntax".
Det är dock bara en av flera möjligheter här.
I mitt fall finns det inget fel i min syntax. Det måste finnas en annan anledning.
Nedan finns några möjliga orsaker till detta fel och förslag på hur man åtgärdar var och en.
Lösning 1
Först av allt, MINUS
operatör introducerades i MariaDB 10.6.1. Därför, om du kör en tidigare version av MariaDB, MINUS
operatören fungerar inte för dig.
I det här fallet, uppgradera din MariaDB-installation till den senaste versionen (eller åtminstone en version tidigast 10.6.1).
Lösning 2
För det andra, MINUS
operatören fungerar bara i Oracle-läge. Även om detta inte uttryckligen nämns i MariaDB:s dokumentation, är det underförstått i uppgiften att implementera MINUS
operatör i MariaDB.
Om du redan kör MariaDB 10.6.1 eller senare måste du byta till Oracle-läge innan du använder MINUS
operatör.
Kör därför följande kod innan du börjar använda
SET sql_mode = "oracle";
Nu bör du kunna använda MINUS
operatorn i din kod.
Lösning 3
Om du har gjort allt ovan, men du fortfarande får ett felmeddelande, är det möjligt att det verkligen finns ett fel i din syntax.
Till exempel kör jag MariaDB 10.6.1 i Oracle-läge, men följande kod ger felet:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Resultat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MINUS
I det här fallet inkluderade jag av misstag ett semikolon efter den första SELECT
uttalande, vilket är ett vanligt misstag. För att fixa detta skulle jag helt enkelt ta bort det första semikolonet:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Framgång!
Lösning 4
Om du har provat alla ovanstående lösningar, men du fortfarande får ett felmeddelande, kanske det är dags att använda EXCEPT
operatör. MINUS
operator är en synonym för EXCEPT
, så de använder båda samma syntax och returnerar samma resultat.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Lösning 5
Om du vid det här laget inte vill ha något med MINUS
att göra eller UTOM
, det finns ett annat alternativ.
Du kan använda en underfråga som följande för att returnera samma resultat:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Uppenbarligen kommer den exakta frågan du använder att bero på ditt schema och dina data.