Nếu bạn nhận được “ ERROR:thiếu mục nhập mệnh đề FROM cho bảng ”Trong PostgreSQL khi sử dụng toán tử như UNION
, INTERSECT
hoặc EXCEPT
, có thể là do bạn đặt tên cột với tên bảng của nó đủ điều kiện.
Để 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: missing FROM-clause entry for table "teachers" LINE 4: ORDER BY Teachers.TeacherName ASC;
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 UNION
, EXCEPT
hoặc INTERSECT
.
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 đề.