Nếu bạn gặp lỗi “1054 (42S22):Cột không xác định‘… ’trong‘ mệnh đề thứ tự ’” khi sử dụng UNION
trong MySQL, có thể là do bạn đang cố gắng tham chiếu đến một cột bí danh theo tên cột của nó.
Khi sử dụng UNION
trong MySQL, nếu một cột có bí danh, thì bạn phải sử dụng bí danh đó trong bất kỳ ORDER BY
nào mệnh đề tham chiếu đến cột đó.
Vì vậy, để sửa lỗi, hãy đảm bảo tham chiếu cột theo bí danh của nó. Ngoài ra, bạn có thể xóa bí danh và tham chiếu trực tiếp đến tên cột.
Ví dụ về Lỗi
Dưới đây là một ví dụ về mã tạo ra lỗi:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Kết quả:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Ở đây, tôi đã cố gắng sắp xếp các kết quả theo TeacherName
nhưng cột đó có bí danh. Thực tế là tôi không sử dụng bí danh trong ORDER BY
mệnh đề đủ để tạo ra lỗi.
Giải pháp 1
Một cách để khắc phục sự cố này là sử dụng 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 | +--------+
Điều đó đã giải quyết được vấn đề.
Giải pháp 2
Một cách khác để làm điều đó là xóa hoàn toàn bí danh:
(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 | +-------------+