PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Khắc phục “LỖI:thiếu mục nhập mệnh đề FROM cho bảng” trong PostgreSQL khi sử dụng UNION, EXCEPT hoặc INTERSECT

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 đề.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 công cụ giám sát truy vấn PostgreSQL hàng đầu

  2. Thực hiện WHERE IN trên nhiều cột trong Postgresql

  3. Kết quả truy vấn lưu trữ trong một biến sử dụng trong PL / pgSQL

  4. không thể xóa đối tượng do ràng buộc khóa ngoại

  5. PSQLException:ResultSet không được đặt đúng vị trí, có lẽ bạn cần phải gọi tiếp theo