Khi sử dụng EXCEPT của PostgreSQL , nếu bạn gặp lỗi có nội dung “ LỖI:mỗi truy vấn NGOẠI LỆ phải có cùng số cột “, Đó là do có sự không khớp về số lượng cột mà các truy vấn trả về ở hai bên của EXCEPT nhà điều hành.
Cách khắc phục điều này là đảm bảo rằng cả SELECT các câu lệnh trả về cùng một số 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
EXCEPT
SELECT StudentId, StudentName FROM Students; Kết quả:
ERROR: each EXCEPT query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
Đây, SELECT đầu tiên câu lệnh trả về một cột (TeacherName ), nhưng SELECT thứ hai câu lệnh trả về hai cột (StudentId và StudentName ).
Giải pháp
Giải pháp là đảm bảo cả SELECT các câu lệnh trả về cùng một số cột
Sử dụng ví dụ trên, chúng tôi có thể xóa cột thừa khỏi SELECT thứ hai của chúng tôi tuyên bố:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students; Kết quả:
teachername ------------- Cathy Ben
Một tùy chọn khác là thêm cột có liên quan vào SELECT đầu tiên tuyên bố:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students; Kết quả:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben Như ví dụ này minh họa, các hàng khác nhau có thể được trả lại tùy thuộc vào tùy chọn bạn chọn.
Chúng tôi cũng có thể sử dụng EXCEPT ALL , trả về các giá trị trùng lặp:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students; Kết quả:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben Điều này cũng có thể trả về các kết quả giống nhau hoặc khác nhau, tùy thuộc vào dữ liệu.