Istnieje co najmniej kilka możliwych powodów, dla których możesz otrzymać przerażający błąd 1064 (42000), który brzmi „Masz błąd w składni SQL…” itp., gdy próbujesz użyć MINUS
operator w MariaDB.
Omówię je poniżej i zaproponuję kilka rozwiązań.
Przykład błędu
Oto przykład kodu, który powoduje błąd:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Wynik:
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
Zwykle ten błąd jest generowany, gdy w kodzie występuje błąd. Jak wyraźnie stwierdza „Masz błąd w składni SQL”.
Jest to jednak tylko jedna z kilku możliwości.
W moim przypadku nie ma błędu w mojej składni. Musi być inny powód.
Poniżej znajduje się kilka możliwych przyczyn tego błędu i sugestie, jak naprawić każdy z nich.
Rozwiązanie 1
Przede wszystkim MINUS
operator został wprowadzony w MariaDB 10.6.1. Dlatego jeśli używasz wcześniejszej wersji MariaDB, MINUS
operator nie będzie dla Ciebie pracował.
W takim przypadku zaktualizuj swoją instalację MariaDB do najnowszej wersji (lub przynajmniej wersji nie wcześniejszej niż 10.6.1).
Rozwiązanie 2
Po drugie, MINUS
operator działa tylko w trybie Oracle. Chociaż nie jest to wyraźnie wymienione w dokumentacji MariaDB, jest to implikowane w zadaniu implementacji MINUS
operator w MariaDB.
Jeśli korzystasz już z MariaDB 10.6.1 lub nowszej, musisz przełączyć się do trybu Oracle przed użyciem MINUS
operatora.
Dlatego uruchom następujący kod, zanim zaczniesz używać MINUS
operator:
SET sql_mode = "oracle";
Teraz powinieneś być w stanie użyć MINUS
operatora w kodzie.
Rozwiązanie 3
Jeśli wykonałeś wszystkie powyższe czynności, ale nadal pojawia się błąd, możliwe, że naprawdę jest błąd w składni.
Na przykład używam MariaDB 10.6.1 w trybie Oracle, ale następujący kod powoduje błąd:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Wynik:
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
W tym przypadku przypadkowo dodałem średnik po pierwszym SELECT
oświadczenie, co jest częstym błędem. Aby to naprawić, po prostu usunę pierwszy średnik:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Wynik:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Sukces!
Rozwiązanie 4
Jeśli wypróbowałeś wszystkie powyższe rozwiązania, ale nadal pojawia się błąd, być może nadszedł czas, aby użyć EXCEPT
operator. MINUS
operator jest synonimem EXCEPT
, więc obaj używają tej samej składni i zwracają ten sam wynik.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Wynik:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Rozwiązanie 5
Jeśli do tej pory nie chcesz mieć nic wspólnego z MINUS
lub EXCEPT
, istnieje inna opcja.
Możesz użyć podzapytania podobnego do poniższego, aby zwrócić ten sam wynik:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Oczywiście dokładne zapytanie, którego użyjesz, będzie zależeć od schematu i danych.