Я пробовал оба
1) smthng = any (выберите id из exmplTable)
2) smthng в (выберите id из exmplTable)
и я получаю те же результаты для своих данных.
Есть ли разница для двух выражений?
Я пробовал оба
1) smthng = any (выберите id из exmplTable)
2) smthng в (выберите id из exmplTable)
и я получаю те же результаты для своих данных.
Есть ли разница для двух выражений?
Нет, в этих вариантах одинаковы:
Вы можете видеть - планы выполнения тоже самые:
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)
Это может быть краевой случай, но:
select * from myTable where id IN ()
будет производить: ERROR: синтаксическая ошибка в точке или рядом ")"
но
select * from myTable where id = ANY('{}');
Вернет пустой набор результатов