2016-12-27 10 views
0

存在するかどうかを真(trueまたはfalse)で返す単一のクエリを探しています。ただ1つではなくidのリストです。idsのリストが存在するかどうかをチェックする方法

共通クエリは次の

select exist(select 1 from one_table where id_table = 'some_value') 

のようなもので、私は複数の値をチェックし、問合せをしたいと思い存在します。次のようなものになります

select exist(select 1 from one_table 
      where id_table in('some_value_1', '...')) 

しかし、私が探しているすべてのIDが存在する必要があります。

+0

それはid_table'が 'UNIQUE'または' PRIMARY KEY'定義されている 'かどうかを宣言するために不可欠です。 *テーブルの定義とPostgresのバージョンを*すべての*質問に追加するのがベストです。そして、値の*リスト*、テーブルのような*集合*、または配列*を提供しますか? –

答えて

2

一つの方法は、count(*)を使用する:

select <n> = (select count(*) from one_table where id_table in ('some_value_1', '...') 

<n>がIDの数であろう。

もう一つの方法は、existsのシーケンスを使用することです:

select (exists (select 1 from one_table where id_table = id1) and 
     exists (select 1 from one_table where id_table = id2) and 
     . . . 
     ) 
+0

これは私が探しているものです。パフォーマンスの面ではどちらが良いですか? – Pau

+0

'one_able(id_table)'にインデックスを持っていれば問題ありません。 2番目のものは短絡のためにわずかな性能上の利点がありますが、これが実際に違いを生むかどうかを確認するには、システムで試してみる必要があります。 –

関連する問題