从DB表中不存在的列表中选择值

时间:2017-06-08 23:16:47

标签: sql db2

我有一个值列表。我试图从该列表中选择表中没有出现的所有值。

例如

var_nos ['Z1234', 'Z1235, 'Z1236'] select * from db_table where db_idno not in var_nos 这可能吗?

**阅读后,我不确定这是否有意义。我想从var_nos返回未出现在POHED中的值。

可能SQL不是处理此问题的最佳方法吗?

4 个答案:

答案 0 :(得分:1)

外部联接应该这样做:

with var_nos (no) as ( values ('Z1234'), ('Z1235'),  ('Z1236'))
select no 
from var_nos
left outer join 
db_table
  on db_table.db_idno = var_nos.no
where db_table.db_idno is null

可替换地:

select no 
from table ( values ('Z1234'), ('Z1235'),  ('Z1236')) as var_nos (no)
where not exists (
  select 1 from db_table where db_table.db_idno = var_nos.no
)

P.S。未经测试。

答案 1 :(得分:1)

您可以根据需要声明临时表,而不是创建列表。 但是,您可以从以下查询中获得相同的结果。它不如为要从结果中排除的列表创建临时变量那么优雅。

SELECT * FROM db_table
WHERE db_idno NOT IN (SELECT db_idno FROM db_table WHERE db_idno NOT IN ('Z1234', 'Z1235,  'Z1236'))

我在MySQL中对此进行了测试,但它确实有效。让我知道它是怎么回事

答案 2 :(得分:1)

您可以使用'不在'。

select * 
from db_table where db_idno not in (
    select * from (
        select 'Z1234' db_idno   
        union select 'Z1235'
        union select 'Z1236' 
    ) exclude
)

在MySQL上测试。

答案 3 :(得分:1)

您可以在阵列上使用UNNEST将其转换为表格

SELECT *
FROM db_table
LEFT JOIN UNNEST(var_nos AS T(var_nos)) ON T.var_nos = db_table.var_nos
WHERE T.var_nos is null

这只适用于SP。