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。
答案 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[])) ...
能够从您的应用程序传递各种数量的输入值,而无需重写查询。