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.