SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
Và kết quả là 1,2,3,4,5,6Một PostgreSQL truy vấn với 'BẤT CỨ' không hoạt động
SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
Và kết quả là 1,2,3,4,5,6Một PostgreSQL truy vấn với 'BẤT CỨ' không hoạt động
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
Bạn có nghĩa là:
"Ticked_id" NOT IN (1,2,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
Ô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 :) –