sql >> Database teknologi >  >> RDS >> MariaDB

Ret fejl 1064 (42000), når du bruger MINUS-operatøren i MariaDB

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

SET sql_mode = "oracle";

Nu skulle du være i stand til at bruge MINUS operatør i din kode.

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. MINUS operator er et synonym for 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.


  1. Oracle lag mellem commit og select

  2. Implementering af SQL Server Performance Indicator for forespørgsler, lagrede procedurer og triggere

  3. Sjovt med Djangos nye Postgres-funktioner

  4. SQL Server trigger indsæt værdier fra ny række i en anden tabel