Er zijn op zijn minst een paar mogelijke redenen waarom u de gevreesde fout 1064 (42000) krijgt met de tekst "U heeft een fout in uw SQL-syntaxis ..." enz. wanneer u de MINUS
probeert te gebruiken operator in MariaDB.
Ik zal deze hieronder onderzoeken en enkele oplossingen bieden.
Voorbeeld van de fout
Hier is een voorbeeld van code die de fout veroorzaakt:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultaat:
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
Normaal gesproken wordt deze fout geproduceerd wanneer u een fout in uw code heeft. Zoals het expliciet vermeldt:"U heeft een fout in uw SQL-syntaxis".
Dat is echter slechts een van de vele mogelijkheden hier.
In mijn geval is er geen fout in mijn syntaxis. Er moet een andere reden zijn.
Hieronder staan enkele mogelijke redenen voor deze fout en suggesties voor het oplossen van elke fout.
Oplossing 1
Allereerst de MINUS
operator werd geïntroduceerd in MariaDB 10.6.1. Daarom, als u een eerdere versie van MariaDB gebruikt, is de MINUS
operator werkt niet voor u.
Upgrade in dit geval uw MariaDB-installatie naar de nieuwste versie (of in ieder geval een versie die niet ouder is dan 10.6.1).
Oplossing 2
Ten tweede, de MINUS
operator werkt alleen in Oracle-modus. Hoewel dit niet expliciet wordt vermeld in de documentatie van MariaDB, wordt het geïmpliceerd in de taak voor het implementeren van de MINUS
operator in MariaDB.
Als u MariaDB 10.6.1 of hoger al gebruikt, moet u overschakelen naar de Oracle-modus voordat u de MINUS
gebruikt telefoniste.
Voer daarom de volgende code uit voordat u de MINUS
. gaat gebruiken operator:
SET sql_mode = "oracle";
Nu zou je de MINUS
. moeten kunnen gebruiken operator in uw code.
Oplossing 3
Als je al het bovenstaande hebt gedaan, maar nog steeds een foutmelding krijgt, is het mogelijk dat er echt is een fout in uw syntaxis.
Ik gebruik bijvoorbeeld MariaDB 10.6.1 in Oracle-modus, maar de volgende code produceert de fout:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Resultaat:
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
In dit geval heb ik per ongeluk een puntkomma toegevoegd na de eerste SELECT
verklaring, wat een veelgemaakte fout is. Om dit op te lossen, zou ik gewoon die eerste puntkomma verwijderen:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultaat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Succes!
Oplossing 4
Als je alle bovenstaande oplossingen hebt geprobeerd, maar nog steeds een foutmelding krijgt, is het misschien tijd om de EXCEPT
te gebruiken exploitant. De MINUS
operator is een synoniem voor EXCEPT
, dus ze gebruiken allebei dezelfde syntaxis en geven hetzelfde resultaat terug.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Resultaat:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Oplossing 5
Als je nu niets meer te maken wilt hebben met MINUS
of EXCEPT
, er is een andere optie.
U kunt een subquery zoals de volgende gebruiken om hetzelfde resultaat te retourneren:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Het is duidelijk dat de exacte query die u gebruikt, afhankelijk is van uw schema en gegevens.