sql >> Database >  >> RDS >> MariaDB

Fix Error 1064 (42000) bij gebruik van de MINUS-operator in MariaDB

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.


  1. Aanroepnotatie voor PL/SQL-subroutines in Oracle Database

  2. Hoe kan ik live MySQL-query's bekijken?

  3. hoe gegevens van bestand naar PostgreSQL te kopiëren met behulp van JDBC?

  4. MySQL IFNULL() uitgelegd