Tôi thấy BẤT KỲ và TẤT CẢ đều rất hữu ích khi bạn không chỉ kiểm tra sự bình đẳng hay bất bình đẳng. Cân nhắc
'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);
như đã sử dụng câu trả lời của tôi cho câu hỏi này .
ANY
, ALL
và các phủ định của chúng có thể đơn giản hóa rất nhiều mã mà nếu không thì yêu cầu các truy vấn con hoặc CTE không tầm thường và chúng được sử dụng quá mức theo quan điểm của tôi.
Hãy xem xét ANY
nào sẽ làm việc với bất kỳ nhà điều hành nào. Nó rất tiện dụng với LIKE
và ~
, nhưng sẽ hoạt động với tsquery, kiểm tra thành viên mảng, kiểm tra khóa hstore và hơn thế nữa.
'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])
hoặc:
'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])
Không có ANY
hoặc ALL
bạn có thể phải thể hiện những điều đó dưới dạng truy vấn con hoặc CTE qua VALUES
danh sách với một tổng hợp để tạo ra một kết quả duy nhất. Chắc chắn, bạn có thể làm điều đó nếu bạn muốn, nhưng tôi sẽ tuân theo ANY
.
Có một cảnh báo thực sự ở đây:Trên các phiên bản Pg cũ hơn, nếu bạn đang viết ANY( SELECT ... )
, bạn gần như chắc chắn sẽ tốt hơn về mặt hiệu suất với EXISTS (SELECT 1 FROM ... WHERE ...)
. Nếu bạn đang sử dụng phiên bản mà trình tối ưu hóa sẽ chuyển ANY (...)
tham gia thì bạn không cần phải lo lắng. Nếu nghi ngờ, hãy kiểm tra EXPLAIN
đầu ra.