sql >> Databasteknik >  >> RDS >> MariaDB

Åtgärda fel 1064 (42000) när du använder MINUS-operatören i MariaDB

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 MINUS operatör:

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.


  1. Hur lägger man till kolumn i tabell i SQL?

  2. 2 sätt att ta bort dubbletter av rader i MariaDB (ignorerar primärnyckel)

  3. Vad är det förväntade beteendet för flera set-returnerande funktioner i SELECT-satsen?

  4. Varför i SQL kan NULL inte matcha med NULL?