MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Поправете грешка 1064 (42000) при използване на оператора MINUS в MariaDB

Има поне няколко възможни причини, поради които може да получавате страшната грешка 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);

Очевидно точната заявка, която използвате, ще зависи от вашата схема и данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да стартирате и конфигурирате ProxySQL 2.0 за MySQL Galera Cluster на Docker

  2. Мигриране от MySQL Enterprise към MariaDB 10.3

  3. Как работи SUBSTRING() в MariaDB

  4. 8 начина да добавите час към дата и час в MariaDB

  5. Как да автоматизирате Galera Cluster с помощта на ClusterControl CLI