Der er i det mindste et par mulige årsager til, at du muligvis får den frygtede fejl 1064 (42000), der lyder "Du har en fejl i din SQL-syntaks..." osv., når du prøver at bruge MINUS
operatør i MariaDB.
Jeg vil udforske disse nedenfor og tilbyde nogle løsninger.
Eksempel på fejlen
Her er et eksempel på kode, der forårsager fejlen:
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 opstår denne fejl, når du har en fejl i din kode. Som det udtrykkeligt står "Du har en fejl i din SQL-syntaks".
Det er dog kun en af flere muligheder her.
I mit tilfælde er der ingen fejl i min syntaks. Der må være en anden grund.
Nedenfor er nogle mulige årsager til denne fejl og forslag til, hvordan du løser hver enkelt.
Løsning 1
Først og fremmest MINUS
operatør blev introduceret i MariaDB 10.6.1. Derfor, hvis du kører en tidligere version af MariaDB, er MINUS
operatør vil ikke fungere for dig.
I dette tilfælde skal du opgradere din MariaDB-installation til den nyeste version (eller i det mindste en version, der ikke er tidligere end 10.6.1).
Løsning 2
For det andet, MINUS
operatør virker kun i Oracle-tilstand. Selvom dette ikke er eksplicit nævnt i MariaDB's dokumentation, er det underforstået i opgaven til implementering af MINUS
operatør i MariaDB.
Hvis du allerede kører MariaDB 10.6.1 eller nyere, skal du skifte til Oracle-tilstand, før du bruger MINUS
operatør.
Kør derfor følgende kode, før du begynder at bruge
SET sql_mode = "oracle";
Nu skulle du være i stand til at bruge
Løsning 3
Hvis du har gjort alt ovenstående, men du stadig får en fejl, er det muligt, at der virkelig er en fejl i din syntaks.
For eksempel kører jeg MariaDB 10.6.1 i Oracle-tilstand, men følgende kode producerer fejlen:
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 dette tilfælde inkluderede jeg ved et uheld et semikolon efter den første SELECT
udsagn, hvilket er en almindelig fejl. For at løse dette, ville jeg simpelthen fjerne det første semikolon:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Succes!
Løsning 4
Hvis du har prøvet alle ovenstående løsninger, men du stadig får en fejl, er det måske på tide at bruge EXCEPT
operatør. EXCEPT
, så de bruger begge den samme syntaks og returnerer det samme resultat.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Resultat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Løsning 5
Hvis du nu ikke vil have noget at gøre med MINUS
eller EXCEPT
, der er en anden mulighed.
Du kan bruge en underforespørgsel som følgende til at returnere det samme resultat:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Det er klart, at den nøjagtige forespørgsel, du bruger, afhænger af dit skema og dine data.