MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Sửa lỗi 1064 (42000) khi sử dụng Toán tử MINUS trong MariaDB

Có ít nhất một vài lý do có thể khiến bạn gặp phải lỗi đáng sợ 1064 (42000) có nội dung “Bạn có lỗi trong cú pháp SQL của mình…” v.v. khi cố gắng sử dụng MINUS toán tử trong MariaDB.

Tôi sẽ khám phá những điều này bên dưới và đưa ra một số giải pháp.

Ví dụ về Lỗi

Dưới đây là một ví dụ về mã gây ra lỗi:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Kết quả:

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

Thông thường, lỗi này được tạo ra khi bạn có lỗi trong mã của mình. Vì nó tuyên bố rõ ràng "Bạn có lỗi trong cú pháp SQL của mình".

Tuy nhiên, đó chỉ là một trong số nhiều khả năng ở đây.

Trong trường hợp của tôi, không có lỗi trong cú pháp của tôi. Phải có một lý do khác.

Dưới đây là một số lý do có thể gây ra lỗi này và các đề xuất về cách khắc phục từng lỗi.

Giải pháp 1

Trước hết, MINUS toán tử đã được giới thiệu trong MariaDB 10.6.1. Do đó, nếu bạn đang chạy phiên bản MariaDB cũ hơn, thì MINUS nhà điều hành sẽ không làm việc cho bạn.

Trong trường hợp này, hãy nâng cấp cài đặt MariaDB của bạn lên phiên bản mới nhất (hoặc ít nhất, phiên bản không sớm hơn 10.6.1).

Giải pháp 2

Thứ hai, MINUS toán tử chỉ hoạt động trong chế độ Oracle. Mặc dù điều này không được đề cập rõ ràng trong tài liệu của MariaDB, nhưng nó được ngụ ý trong nhiệm vụ triển khai MINUS toán tử trong MariaDB.

Nếu bạn đang chạy MariaDB 10.6.1 trở lên, bạn cần chuyển sang chế độ Oracle trước khi sử dụng MINUS nhà điều hành.

Do đó, hãy chạy mã sau trước khi bạn bắt đầu sử dụng MINUS nhà điều hành:

SET sql_mode = "oracle";

Bây giờ bạn sẽ có thể sử dụng MINUS toán tử trong mã của bạn.

Giải pháp 3

Nếu bạn đã thực hiện tất cả những điều trên nhưng vẫn gặp lỗi, thì có thể thực sự một lỗi trong cú pháp của bạn.

Ví dụ:tôi đang chạy MariaDB 10.6.1 ở chế độ Oracle, nhưng mã sau tạo ra lỗi:

SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;

Kết quả:

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

Trong trường hợp này, tôi đã vô tình bao gồm dấu chấm phẩy sau SELECT đầu tiên đó là một sai lầm phổ biến. Để khắc phục điều này, tôi chỉ cần xóa dấu chấm phẩy đầu tiên đó:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Kết quả:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Thành công!

Giải pháp 4

Nếu bạn đã thử tất cả các giải pháp trên nhưng vẫn gặp lỗi, có thể đã đến lúc sử dụng EXCEPT nhà điều hành. MINUS toán tử là từ đồng nghĩa với EXCEPT , vì vậy cả hai đều sử dụng cùng một cú pháp và trả về cùng một kết quả.

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Kết quả:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Giải pháp 5

Nếu bây giờ bạn không muốn làm gì với MINUS hoặc EXCEPT , có một tùy chọn khác.

Bạn có thể sử dụng một truy vấn con như sau để trả về cùng một kết quả:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Rõ ràng, truy vấn chính xác bạn sử dụng sẽ phụ thuộc vào lược đồ và dữ liệu của bạn.


  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 ColumnStore là gì?

  2. Cách STR_TO_DATE () hoạt động trong MariaDB

  3. Cách UUID_SHORT () hoạt động trong MariaDB

  4. Cách LOWER () hoạt động trong MariaDB

  5. 4 cách tìm hàng có chứa chữ thường trong MariaDB