MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Napraw błąd 1064 (42000) podczas korzystania z operatora MINUS w MariaDB

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB MaxScale Load Balancing w Dockerze:Wdrożenie:część pierwsza

  2. 3 sposoby na zwrot modułu Modulo w MariaDB

  3. Jak działa SECOND() w MariaDB

  4. Jak EXP() działa w MariaDB

  5. Optymalizacja silnika pamięci masowej MySQL:konfiguracja optymalizacji InnoDB pod kątem wysokiej wydajności