Bổ sung ALL/ANY
câu trả lời
Tôi thích tất cả các giải pháp sử dụng all
hoặc any
để đạt được kết quả, đánh giá cao các ghi chú bổ sung (ví dụ: về NULL s). Đây là một cách để suy nghĩ về các toán tử đó.
Bạn có thể nghĩ về chúng như là các toán tử ngắn mạch :
all(array)
đi qua tất cả các giá trị trong mảng, so sánh từng giá trị với giá trị tham chiếu bằng cách sử dụng toán tử được cung cấp. Ngay khi kết quả so sánh false
, quá trình kết thúc bằng false, ngược lại là true. (So sánh với logic ngắn mạch and
.)
any(array)
đi qua tất cả các giá trị trong mảng, so sánh từng giá trị với giá trị tham chiếu bằng cách sử dụng toán tử được cung cấp. Ngay khi kết quả so sánh true
, quá trình kết thúc với true, ngược lại là false. (So sánh với logic ngắn mạch or
.)
Đây là lý do tại sao 3 <> any('{1,2,3}')
không mang lại kết quả mong muốn: Quá trình so sánh 3 với 1 cho bất đẳng thức, là true, và ngay lập tức trả về true. Một giá trị duy nhất trong mảng khác với 3 là đủ để làm cho toàn bộ điều kiện đúng. 3 ở vị trí mảng cuối cùng là giá trị thử nghiệm. không bao giờ được sử dụng.
3 <> all('{1,2,3}')
mặt khác đảm bảo rằng tất cả các giá trị không bằng nhau 3. Nó sẽ chạy qua tất cả các phép so sánh mang lại giá trị true cho đến một phần tử cho kết quả false (cuối cùng trong trường hợp này), để trả về false dưới dạng kết quả tổng thể. Đây là những gì OP muốn.
WHERE 3 NOT IN recipient_ids
hoạt động?