Existuje alespoň několik možných důvodů, proč se vám při pokusu o použití MINUS
může zobrazovat obávaná chyba 1064 (42000), která zní „Máte chybu v syntaxi SQL…“ atd. operátor v MariaDB.
Níže je prozkoumám a nabídnu některá řešení.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Výsledek:
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
Normálně se tato chyba vytvoří, když máte chybu v kódu. Jak je výslovně uvedeno „Máte chybu v syntaxi SQL“.
Zde je to však pouze jedna z několika možností.
V mém případě není v mé syntaxi žádná chyba. Musí existovat jiný důvod.
Níže jsou uvedeny některé možné důvody této chyby a návrhy, jak každou z nich opravit.
Řešení 1
Za prvé, MINUS
operátor byl představen v MariaDB 10.6.1. Pokud tedy používáte starší verzi MariaDB, MINUS
operátor pro vás nebude fungovat.
V takovém případě upgradujte svou instalaci MariaDB na nejnovější verzi (nebo alespoň verzi ne starší než 10.6.1).
Řešení 2
Za druhé, MINUS
Operátor funguje pouze v režimu Oracle. Ačkoli to není výslovně uvedeno v dokumentaci MariaDB, je to zahrnuto v úloze implementace MINUS
operátor v MariaDB.
Pokud již používáte MariaDB 10.6.1 nebo novější, budete se muset před použitím MINUS
přepnout do režimu Oracle operátor.
Proto spusťte následující kód, než začnete používat MINUS
operátor:
SET sql_mode = "oracle";
Nyní byste měli být schopni používat MINUS
operátor ve vašem kódu.
Řešení 3
Pokud jste provedli vše výše uvedené, ale stále se vám zobrazuje chyba, je možné, že skutečně existuje chyba ve vaší syntaxi.
Například používám MariaDB 10.6.1 v režimu Oracle, ale následující kód způsobuje chybu:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Výsledek:
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
V tomto případě jsem omylem zařadil středník za první SELECT
prohlášení, což je častá chyba. Abych to napravil, jednoduše bych odstranil první středník:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Výsledek:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Úspěch!
Řešení 4
Pokud jste vyzkoušeli všechna výše uvedená řešení, ale stále se vám zobrazuje chyba, možná je čas použít EXCEPT
operátor. MINUS
operátor je synonymem pro EXCEPT
, takže oba používají stejnou syntaxi a vrací stejný výsledek.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Výsledek:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Řešení 5
Pokud už nechcete mít nic společného s MINUS
nebo EXCEPT
, existuje další možnost.
Chcete-li vrátit stejný výsledek, můžete použít poddotaz, jako je tento:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Je zřejmé, že přesný dotaz, který použijete, bude záviset na vašem schématu a datech.