2015-05-15 11 views
14

मैं कोशिश की है दोनोंPostgreSQL - में बनाम किसी भी

1) smthng = किसी भी ( में exmplTable से आईडी)

2) smthng का चयन करें (exmplTable से आईडी चुनें)

और मुझे अपने डेटा के लिए एक ही परिणाम मिल रहा है।

क्या एक्सप्रेशंस के लिए कोई अंतर है?

+2

से [डॉक्स] (http://www.postgresql.org/docs /current/static/functions-subquery.html): * 'SOME'' ANY' के लिए समानार्थी है। 'IN'' = ANY' के बराबर है। * – pozs

+0

एक नज़र डालें, इसकी व्याख्या यहां की गई है: http://www.postgresql.org/docs/current/static/functions-comparisons.html – Roger

उत्तर

16

नहीं, ये वेरिएंट में ही कर रहे हैं:

आप देख सकते हैं - निष्पादन की योजना एक ही भी कर रहे हैं:

 
postgres=# explain select * from foo1 where id in (select id from foo2); 
┌──────────────────────────────────────────────────────────────────┐ 
│       QUERY PLAN       │ 
╞══════════════════════════════════════════════════════════════════╡ 
│ Hash Semi Join (cost=3.25..21.99 rows=100 width=4)    │ 
│ Hash Cond: (foo1.id = foo2.id)         │ 
│ -> Seq Scan on foo1 (cost=0.00..15.00 rows=1000 width=4)  │ 
│ -> Hash (cost=2.00..2.00 rows=100 width=4)     │ 
│   -> Seq Scan on foo2 (cost=0.00..2.00 rows=100 width=4) │ 
└──────────────────────────────────────────────────────────────────┘ 
(5 rows) 

postgres=# explain select * from foo1 where id = any (select id from foo2); 
┌──────────────────────────────────────────────────────────────────┐ 
│       QUERY PLAN       │ 
╞══════════════════════════════════════════════════════════════════╡ 
│ Hash Semi Join (cost=3.25..21.99 rows=100 width=4)    │ 
│ Hash Cond: (foo1.id = foo2.id)         │ 
│ -> Seq Scan on foo1 (cost=0.00..15.00 rows=1000 width=4)  │ 
│ -> Hash (cost=2.00..2.00 rows=100 width=4)     │ 
│   -> Seq Scan on foo2 (cost=0.00..2.00 rows=100 width=4) │ 
└──────────────────────────────────────────────────────────────────┘ 
(5 rows) 
+2

ध्यान दें कि यह सत्य है एक * सेट * लेने वाला फॉर्म, प्रत्येक 'IN()' और '= ANY()' के लिए दूसरा फॉर्म है और वे पूरी तरह से समकक्ष नहीं हैं। विचार करें: http://stackoverflow.com/a/34627688/939860 और http://dba.stackexchange.com/q/125413/3684 –

+1

@ErwinBrandstetter: = कोई भी (ARRAY) अलग प्राणी है .. हालांकि वाक्यविन्यास एक जैसा है –

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