SELECT ... WHERE col1 in(input1,input2)如何知道找不到哪个?

时间:2018-02-13 00:44:25

标签: sql postgresql

SELECT col2 FROM table WHERE col1 in (input1, input2, input3)

如果只得到一个值,如何知道在col1中找不到哪个(input1,input2或input3)?

它应该像SELECT ? FROM (input1, input2, input3) WHERE ? NOT IN col1 FROM table,但找不到任何东西。

顺便说一句,我使用的是PostgeSQL。

1 个答案:

答案 0 :(得分:1)

with v(x) as (values(input1),(input2),(input3))
select v.x from v except select col1 from table;

with v(x) as (values(input1),(input2),(input3))
select distinct v.x from v left join table on (v.x = table.col1)
where table.col1 is null;

with v(x) as (values(input1),(input2),(input3))
select v.x from v
where not exists (select 1 from table where table.col1 = v.x)

我认为最后一个效率最高。

而不是values(input1),(input2),(input3)你可以使用数组:

with v(x) as (select unnest(array[input1,input2,input3])) ...

with v(x) as (select unnest('{input1,input2,input3}'::input_type[])) ...

能够从您的应用程序传递各种数量的输入值,而无需重写查询。