Bất cứ ai cũng biết làm thế nào để thực hiện truy vấn như vậy trong Postgresql?NOT EXISTS khoản trong Postgresql
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB
WHERE tabB.id = tabA.id
)
Khi tôi thực hiện truy vấn như vậy, postgresql than phiền "ERROR: Greenplum Database does not yet support that query
".
EDIT: Và làm thế nào về vấn đề này một:
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
EDIT:
Tôi đã thử nghiệm trong postgresql 8.2.15 cho 4 câu trả lời cung cấp bởi @ypercube. Kết luận là:
1) Đầu tiên không hoạt động trong phiên bản postgresql này, như tôi đã nói ở trên trong câu hỏi. Có thể tìm thấy thông báo lỗi ở đó.
2) Đối với ba câu trả lời còn lại, tốc độ thực hiện là: (3) TÌM KIẾM TRÊN> (4) TRỪ >> (2) KHÔNG IN.
Cụ thể, đối với các truy vấn có cùng cú pháp, (3) LEFT JOIN mất khoảng 5580ms, (4) EXCEPT mất khoảng 13502ms, và (2) NOT IN mất hơn 100000 (Thực tế là tôi không đợi sử dụng xong).
Có lý do cụ thể nào cho mệnh đề NOT IN không quá chậm?
Cheng
PostgreSQL 8.2 cũ và không còn được hỗ trợ. Đã có những thay đổi lớn về cách các truy vấn 'EXISTS' và' NOT EXISTS' hoạt động kể từ đó. http://www.postgresql.org/support/versioning/ – kgrittn
Nếu bạn muốn tìm các truy vấn hiệu quả nhất, tôi nghĩ bạn trước tiên phải kiểm tra các chỉ mục bạn có trên các bảng.Bạn không đề cập đến kích thước của các bảng nhưng 5 giây cho một truy vấn có nghĩa là (99%) hoặc là các bảng lớn hoặc thiếu các chỉ mục. Tôi đề nghị bạn thêm một câu hỏi mới, bao gồm các định nghĩa ('CREATE TABLE') của hai bảng, các truy vấn và các kế hoạch thực hiện. –