2015-05-15 2 views
14

Я попытался какPostGreSQL - в против любого

1) smthng = любой (выберите идентификатор из exmplTable)

2) smthng в (выберите идентификатор из exmplTable)

и получаю те же результаты для своих данных.

Есть ли разница для двух expresions?

+2

Из [Docs] (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: = ANY (ARRAY) - это другое существо .. хотя синтаксис такой же –

Смежные вопросы