अभिव्यक्ति select array_agg(4)
पंक्तियों का रिटर्न सेट (वास्तव में 1 पंक्ति वाली पंक्तियों का सेट)। इसलिए क्वेरी
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
एक पूर्णांक (b.id) की तुलना एक पंक्ति के मान से करने की कोशिश करता है (जिसमें 1 कॉलम प्रकार पूर्णांक [] है)। यह एक त्रुटि उत्पन्न करता है।
इसे ठीक करने के लिए आपको एक सबक्वेरी का उपयोग करना चाहिए जो पूर्णांक देता है (पूर्णांकों की सरणियाँ नहीं):
select *
from b
where b.id = any (select unnest(array_agg(4)))
वैकल्पिक रूप से, आप select array_agg(4)
. के परिणाम का कॉलम नाम रख सकते हैं any
. के तर्क के रूप में , उदा.:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)
या
with agg as (
select array_agg(4) as arr)
select *
from b
cross join agg
where b.id = any (arr)
अधिक औपचारिक रूप से, पहले दो प्रश्न ANY
. का उपयोग करते हैं फ़ॉर्म का:
expression operator ANY (subquery)
और अन्य दो उपयोग
expression operator ANY (array expression)
जैसा कि दस्तावेज़ीकरण में वर्णित है:9.22.4। कोई/कुछ और 9.23.3. कोई/कुछ (सरणी) ।