Nếu bạn nhận được “ERROR 1250 (42000):Không thể sử dụng bảng '…' từ một trong các CHỌN trong mệnh đề LỆNH”, thì có thể là do bạn đủ điều kiện cho một tên cột với tên bảng của nó khi sử dụng một toán tử chẳng hạn như UNION
, INTERSECT
hoặc EXCEPT
trong MariaDB.
Để khắc phục điều 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 ORDER clause
Trong trường hợp này, tôi đã cố gắng sắp xếp kết quả bằng 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).
Các bảng tham chiếu như thế này không hoạt động khi sắp xếp các kết quả của một UNION
hoạt động trong MariaDB. Điều này cũng đúng khi sắp xếp các kết quả của INTERSECT
toán tử và EXCEPT
nhà điều hành.
Giải pháp 1
Một cách để khắc phục sự cố 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;
Giải pháp 2
Một cách khác để sửa nó là sử dụng bí danh cho cột:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Với tùy chọn này, chúng tôi chỉ định một bí danh cho cột và sau đó tham chiếu bí danh đó trong ORDER BY
mệnh đề.