web-dev-qa-db-ja.com

postgreSQL-in vs any

私は両方を試しました

1)smthng = any(exmplTableからidを選択)

2)smthng in(exmplTableからidを選択)

データについても同じ結果が得られます。

2つのexpresionsに違いはありますか?

24
PROvlima

いいえ、これらのバリアントでは同じです:

ご覧のとおり、実行計画も同じです。

 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行)
23
Pavel Stehule

これはエッジの場合かもしれませんが、次のとおりです。

select * from myTable where id IN ()

エラー:「)」またはその近くの構文エラー

だが

select * from myTable where id = ANY('{}');

空の結果セットを返します

6
WigglyWorld