2012-05-20 40 views

Trả lời

56

Bạn muốn sử dụng ALL, không phải ANY. Từ số fine manual:

9.21.3. BẤT CỨ/MỘT SỐ (mảng)

expression operator ANY (array expression) 

[...] Các biểu hiện bên trái được đánh giá và so sánh với mỗi phần tử của mảng bằng cách sử dụng cho hành, mà phải mang lại một kết quả Boolean. Kết quả của ANY là "true" nếu có kết quả thực sự.

Vì vậy, nếu chúng ta nói điều này:

1 != any(array[1,2]) 

sau đó chúng tôi sẽ nhận được sự thật từ (1 != 1) or (1 != 2) là đúng. ANY về bản chất là một toán tử OR. Ví dụ:

=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]); 
id 
---- 
    1 
    2 
    3 
(3 rows) 

Nếu chúng ta nhìn vào ALL, we see:

9.21.4. TẤT CẢ (mảng)

expression operator ALL (array expression) 

[...] Các biểu hiện bên trái được đánh giá và so sánh với mỗi phần tử của mảng bằng cách sử dụng cho hành, mà phải mang lại một kết quả Boolean. Kết quả của ALL là "true" nếu mọi sự so sánh mang lại sự thật ...

vì vậy nếu chúng tôi nói điều này:

1 != all(array[1,2]) 

thì chúng ta sẽ nhận sai vì (1 != 1) and (1 != 2) là sai và chúng ta thấy rằng ALL về bản chất là một nhà điều hành AND. Ví dụ:

=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]); 
id 
---- 
    3 
(1 row) 

Nếu bạn muốn loại trừ tất cả các giá trị trong một mảng, sử dụng ALL:

select "Ticket_id" 
from "Tickets" 
where "Status" = 1 
    and "Ticket_id" != all(array[1,2,3]) 
limit 6 
7

Bạn có nghĩa là:

"Ticked_id" NOT IN (1,2,3) 
+3

Tôi không biết giá trị của mảng. Tôi phải sử dụng BẤT K 01 – Bogo

+0

Ôi xấu của tôi, điều đó thay đổi mọi thứ - http://stackoverflow.com/a/10675636/1406230 ở trên là tốt :) –

Các vấn đề liên quan