Има поне няколко възможни причини, поради които може да получавате страшната грешка 1064 (42000), която гласи „Имате грешка във вашия SQL синтаксис...“ и т.н., когато се опитвате да използвате MINUS
оператор в MariaDB.
Ще ги разгледам по-долу и ще предложа някои решения.
Пример за грешката
Ето пример за код, който причинява грешката:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Резултат:
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
Обикновено тази грешка се получава, когато имате грешка във вашия код. Както е изрично посочено „Имате грешка във вашия SQL синтаксис“.
Това обаче е само една от няколкото възможности тук.
В моя случай няма грешка в синтаксиса ми. Трябва да има друга причина.
По-долу са някои възможни причини за тази грешка и предложения как да коригирате всяка една от тях.
Решение 1
На първо място, MINUS
операторът беше въведен в MariaDB 10.6.1. Следователно, ако използвате по-ранна версия на MariaDB, MINUS
операторът няма да работи за вас.
В този случай надстройте вашата инсталация на MariaDB до най-новата версия (или поне версия не по-стара от 10.6.1).
Решение 2
Второ, MINUS
Операторът работи само в режим Oracle. Въпреки че това не е изрично споменато в документацията на MariaDB, то се подразбира в задачата за внедряване на MINUS
оператор в MariaDB.
Ако вече използвате MariaDB 10.6.1 или по-нова версия, ще трябва да превключите към режим на Oracle, преди да използвате MINUS
оператор.
Затова изпълнете следния код, преди да започнете да използвате MINUS
оператор:
SET sql_mode = "oracle";
Сега трябва да можете да използвате MINUS
оператор във вашия код.
Решение 3
Ако сте направили всичко по-горе, но все още получавате грешка, възможно е наистина е грешка във вашия синтаксис.
Например, изпълнявам MariaDB 10.6.1 в режим на Oracle, но следният код създава грешката:
SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;
Резултат:
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
В този случай случайно включих точка и запетая след първия SELECT
твърдение, което е често срещана грешка. За да поправя това, просто бих премахнал първата точка и запетая:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Резултат:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Успех!
Решение 4
Ако сте опитали всички горепосочени решения, но все още получавате грешка, може би е време да използвате EXCEPT
оператор. MINUS
операторът е синоним на EXCEPT
, така че и двете използват един и същ синтаксис и връщат един и същ резултат.
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Резултат:
+-------------+ | TeacherName | +-------------+ | Ben | | Cathy | +-------------+
Решение 5
Ако досега не искате да имате нищо общо с MINUS
или EXCEPT
, има и друга опция.
Можете да използвате подзаявка като следната, за да върнете същия резултат:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Очевидно точната заявка, която използвате, ще зависи от вашата схема и данни.