私は両方を試しました
1)smthng = any(exmplTableからidを選択)
2)smthng in(exmplTableからidを選択)
データについても同じ結果が得られます。
2つのexpresionsに違いはありますか?
いいえ、これらのバリアントでは同じです:
ご覧のとおり、実行計画も同じです。
postgres =#説明select * from foo1 where id in(select id from foo2); ┌─────────────────────── ─────────────────────────────────────────────┐ │QUERY PLAN│ ╞======================================= ===========================╡ │ハッシュ半結合(コスト= 3.25..21.99行= 100幅= 4 )│ │ハッシュ条件:(foo1.id = foo2.id)│ │-> foo1のSeqスキャン(cost = 0.00..15.00 rows = 1000 width = 4)│ │->ハッシュ(cost = 2.00..2.00 rows = 100 width = 4)│ │-> foo2のSeq Scan(cost = 0.00..2.00 rows = 100 width = 4)│ └─ ──────────────────────────────────────────────────── ──────────────┘ (5行) postgres =#説明select * from foo1 where id = any(select id from foo2); ┌─────────────────────────────────────────────────────────────── ─────────────────────────┐ │QUERY PLAN│ ╞========= ================================================ =======╡ │ハッシュ半結合(コスト= 3.25..21.99行= 100幅= 4)│ │ハッシュ条件:(foo1.id = foo2.id) │ │-> fooのSeqスキャン1(cost = 0.00..15.00 rows = 1000 width = 4)│ │-> Hash(cost = 2.00..2.00 rows = 100 width = 4)│ │-> Seq Scan foo2(cost = 0.00..2.00 rows = 100 width = 4)│ └──────────────────────────── ───────────────────────────────────────┘ (5行)
これはエッジの場合かもしれませんが、次のとおりです。
select * from myTable where id IN ()
エラー:「)」またはその近くの構文エラー
だが
select * from myTable where id = ANY('{}');
空の結果セットを返します