2016-12-27 72 views
0

我正在寻找做一个单一的查询,返回如果存在(true或false)的id列表,而不是一个。如何检查是否存在一个ID列表

共同存在查询有如下

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版本*任何*问题。你是否提供了一个* list *值,一个* set *(如表)或一个*数组* *? –

回答

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)'索引,它们应该没问题。第二个可能由于短路而具有轻微的性能优势,但是您需要在系统上尝试一下,看看它是否真的有所作为。 –