MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Correction de l'erreur 1064 (42000) lors de l'utilisation de l'opérateur MINUS dans MariaDB

Il y a au moins quelques raisons possibles pour lesquelles vous pourriez obtenir l'erreur redoutée 1064 (42000) qui se lit "Vous avez une erreur dans votre syntaxe SQL…" etc lorsque vous essayez d'utiliser le MINUS opérateur dans MariaDB.

Je vais les explorer ci-dessous et proposer quelques solutions.

Exemple d'erreur

Voici un exemple de code à l'origine de l'erreur :

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Résultat :

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

Normalement, cette erreur se produit lorsque vous avez une erreur dans votre code. Comme il est explicitement indiqué "Vous avez une erreur dans votre syntaxe SQL".

Cependant, ce n'est qu'une des nombreuses possibilités ici.

Dans mon cas, il n'y a pas d'erreur dans ma syntaxe. Il doit y avoir une autre raison.

Vous trouverez ci-dessous quelques raisons possibles de cette erreur et des suggestions pour résoudre chacune d'entre elles.

Solution 1

Tout d'abord, le MINUS L'opérateur a été introduit dans MariaDB 10.6.1. Par conséquent, si vous exécutez une version antérieure de MariaDB, le MINUS l'opérateur ne fonctionnera pas pour vous.

Dans ce cas, mettez à niveau votre installation MariaDB vers la dernière version (ou au moins, une version pas antérieure à 10.6.1).

Solution 2

Deuxièmement, le MINUS L'opérateur ne fonctionne qu'en mode Oracle. Bien que cela ne soit pas explicitement mentionné dans la documentation de MariaDB, cela est implicite dans la tâche d'implémentation du MINUS opérateur dans MariaDB.

Si vous utilisez déjà MariaDB 10.6.1 ou une version ultérieure, vous devrez passer en mode Oracle avant d'utiliser le MINUS opérateur.

Par conséquent, exécutez le code suivant avant de commencer à utiliser le MINUS opérateur :

SET sql_mode = "oracle";

Vous devriez maintenant pouvoir utiliser le MINUS opérateur dans votre code.

Solution 3

Si vous avez fait tout ce qui précède, mais que vous obtenez toujours une erreur, il est possible qu'il y ait vraiment il y en a une erreur dans votre syntaxe.

Par exemple, j'exécute MariaDB 10.6.1 en mode Oracle, mais le code suivant génère l'erreur :

SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;

Résultat :

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

Dans ce cas, j'ai accidentellement inclus un point-virgule après le premier SELECT déclaration, ce qui est une erreur courante. Pour résoudre ce problème, je supprimerais simplement ce premier point-virgule :

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Résultat :

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Succès !

Solution 4

Si vous avez essayé toutes les solutions ci-dessus, mais que vous obtenez toujours une erreur, il est peut-être temps d'utiliser le EXCEPT opérateur. Le MINUS L'opérateur est synonyme de EXCEPT , ils utilisent donc tous les deux la même syntaxe et renvoient le même résultat.

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Résultat :

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Solution 5

Si maintenant vous ne voulez rien avoir à faire avec MINUS ou EXCEPT , il existe une autre option.

Vous pouvez utiliser une sous-requête comme celle-ci pour renvoyer le même résultat :

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Évidemment, la requête exacte que vous utiliserez dépendra de votre schéma et de vos données.