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ự là 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.