2012-05-20 11 views

उत्तर

56

आप उपयोग करना चाहते हैं ALL, ANY नहीं। fine manual से:

9.21.3। किसी भी/कुछ (सरणी)

expression operator ANY (array expression) 

[...] बाएं हाथ की अभिव्यक्ति का मूल्यांकन किया और यह देखते हुए ऑपरेटर है, जो एक बूलियन परिणाम उपज चाहिए का उपयोग कर सरणी के प्रत्येक तत्व की तुलना में है। ANY का परिणाम "सत्य" है यदि कोई वास्तविक परिणाम प्राप्त होता है।

तो अगर हम कहते हैं कि यह:

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

तो हम सच मिल जाएगा के बाद से (1 != 1) or (1 != 2) सच है। ANY अनिवार्य रूप से OR ऑपरेटर है। उदाहरण के लिए:

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

अगर हम ALL, we see को देखो:

9.21.4। सभी (सरणी)

expression operator ALL (array expression) 

[...] बाएं हाथ की अभिव्यक्ति का मूल्यांकन किया और यह देखते हुए ऑपरेटर है, जो एक बूलियन परिणाम उपज चाहिए का उपयोग कर सरणी के प्रत्येक तत्व की तुलना में है। ALL का परिणाम "सही"

इसलिए यदि हम कहते हैं कि यह है अगर सब तुलना सच उपज ...: के बाद से (1 != 1) and (1 != 2) गलत है

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

तो हम झूठे मिल जाएगा और हम देख ALL अनिवार्य रूप से AND ऑपरेटर है। उदाहरण के लिए:

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

आप एक सरणी में सभी मूल्यों को बाहर निकालना चाहते हैं, तो ALL का उपयोग करें:

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

तुम्हारा मतलब क्या है:

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

मैं सरणी के मूल्य पता नहीं है। मुझे किसी भी – Bogo

+0

का उपयोग करना है ओह, मेरा बुरा, यह सबकुछ बदलता है - http://stackoverflow.com/a/10675636/1406230 ऊपर अच्छा है :) –

संबंधित मुद्दे