Я попытался какPostGreSQL - в против любого
1) smthng = любой (выберите идентификатор из exmplTable)
2) smthng в (выберите идентификатор из exmplTable)
и получаю те же результаты для своих данных.
Есть ли разница для двух expresions?
Я попытался какPostGreSQL - в против любого
1) smthng = любой (выберите идентификатор из exmplTable)
2) smthng в (выберите идентификатор из exmplTable)
и получаю те же результаты для своих данных.
Есть ли разница для двух expresions?
Нет, в этих вариантах одинаковы:
Вы можете увидеть - планы выполнения такие же, тоже:
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)
Обратите внимание, что хотя это верно для форма, принимающая * набор *, для каждого 'IN()' и '= ANY()' существует вторая форма, и они не являются полностью эквивалентными. Рассмотрим: http://stackoverflow.com/a/34627688/939860 и http://dba.stackexchange.com/q/125413/3684 –
@ErwinBrandstetter: = ANY (ARRAY) - это другое существо .. хотя синтаксис такой же –
Из [Docs] (http://www.postgresql.org/docs /current/static/functions-subquery.html): * 'SOME' является синонимом' ANY'. 'IN' эквивалентно' = ANY'. * – pozs
Посмотрите, его объяснение здесь: http://www.postgresql.org/docs/current/static/functions-comparisons.html – Roger