Nếu bạn gặp lỗi có nội dung “ERROR 1250 (42000):Không thể sử dụng bảng‘… ’từ một trong các CHỌN trong mệnh đề ORDER chung” khi sử dụng UNION
trong một truy vấn MySQL, có thể là do bạn đang đặt tên cột với tên bảng của nó đủ điều kiện.
Điều này không hoạt động trong MySQL.
Để khắc phục sự cố này, hãy xóa tên bảng hoặc sử dụng bí danh cột.
Ví dụ về Lỗi
Dưới đây là một ví dụ về mã tạo ra lỗi:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;
Kết quả:
ERROR 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Ở đây, tôi đã cố gắng sắp xếp các kết quả theo TeacherName
nhưng tôi đã đủ điều kiện cho cột đó với tên bảng (Tôi đã sử dụng Teachers.TeacherName
để tham chiếu đến tên cột).
MySQL không cho phép các bảng được tham chiếu theo cách này khi sắp xếp các kết quả của một UNION
hoạt động.
Giải pháp 1
Một cách để khắc phục điều này là xóa tên bảng khỏi ORDER BY
mệnh đề:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Kết quả:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Giải pháp 2
Nếu tùy chọn trước đó không phù hợp, một cách khác để khắc phục sự cố là sử dụng bí danh. Nói cách khác, chỉ định một bí danh cho cột, sau đó tham chiếu bí danh đó trong ORDER BY
mệnh đề:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Kết quả:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+