sql >> Databáze >  >> RDS >> MariaDB

Oprava chyby 1064 (42000) při použití operátora MINUS v MariaDB

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.


  1. Rozdělte řetězec mezerou a znakem jako oddělovač v Oracle pomocí regexp_substr

  2. Izolace transakcí v PostgreSQL

  3. Upgrade na nejnovější Jira s nejnovější verzí serveru MariaDB

  4. Jaký je nejúčinnější způsob, jak oříznout čas od data a času?