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

Correggere l'errore 1064 (42000) quando si utilizza l'operatore MINUS in MariaDB

Ci sono almeno alcune possibili ragioni per cui potresti ricevere il temuto errore 1064 (42000) che dice "Si è verificato un errore nella sintassi SQL..." ecc. quando si tenta di utilizzare MINUS operatore in MariaDB.

Li esplorerò di seguito e offrirò alcune soluzioni.

Esempio di errore

Ecco un esempio di codice che causa l'errore:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Risultato:

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

Normalmente, questo errore viene prodotto quando si verifica un errore nel codice. Poiché afferma esplicitamente "Si è verificato un errore nella sintassi SQL".

Tuttavia, questa è solo una delle numerose possibilità qui.

Nel mio caso, non ci sono errori nella mia sintassi. Dev'esserci un altro motivo.

Di seguito sono riportati alcuni possibili motivi di questo errore e suggerimenti su come risolverli.

Soluzione 1

Innanzitutto il MINUS operatore è stato introdotto in MariaDB 10.6.1. Pertanto, se stai eseguendo una versione precedente di MariaDB, il MINUS l'operatore non funzionerà per te.

In questo caso, aggiorna la tua installazione di MariaDB all'ultima versione (o almeno a una versione non precedente alla 10.6.1).

Soluzione 2

In secondo luogo, il MINUS operatore funziona solo in modalità Oracle. Sebbene ciò non sia esplicitamente menzionato nella documentazione di MariaDB, è implicito nell'attività di implementazione di MINUS operatore in MariaDB.

Se stai già eseguendo MariaDB 10.6.1 o versioni successive, dovrai passare alla modalità Oracle prima di utilizzare MINUS operatore.

Pertanto, esegui il codice seguente prima di iniziare a utilizzare MINUS operatore:

SET sql_mode = "oracle";

Ora dovresti essere in grado di utilizzare il MINUS operatore nel tuo codice.

Soluzione 3

Se hai eseguito tutte le operazioni precedenti, ma continui a ricevere un errore, è possibile che ci sia davvero un errore nella tua sintassi.

Ad esempio, sto eseguendo MariaDB 10.6.1 in modalità Oracle, ma il codice seguente genera l'errore:

SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;

Risultato:

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 questo caso, ho accidentalmente incluso un punto e virgola dopo il primo SELECT affermazione, che è un errore comune. Per risolvere questo problema, rimuoverei semplicemente il primo punto e virgola:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Risultato:

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

Successo!

Soluzione 4

Se hai provato tutte le soluzioni di cui sopra, ma continui a ricevere un errore, forse è il momento di utilizzare EXCEPT operatore. Il MINUS operator è sinonimo di EXCEPT , quindi entrambi usano la stessa sintassi e restituiscono lo stesso risultato.

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Risultato:

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

Soluzione 5

Se ormai non vuoi avere niente a che fare con MINUS o EXCEPT , c'è un'altra opzione.

Puoi utilizzare una sottoquery come la seguente per restituire lo stesso risultato:

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

Ovviamente, la query esatta che utilizzi dipenderà dal tuo schema e dai tuoi dati.