找出表中没有的值

时间:2016-08-03 04:51:06

标签: mysql sql db2

假设遵循简单表

Col1
======
one
two

假设遵循简单查询

Select count(*) from TABLE_A where Col1 in ('one','two','three','four')

在上面的查询中,它将产生以下结果

  2

现在我想找出IN-条件中的值是什么,这在table_A中是不可用的。

如何找出表中没有的值?

如下结果

three
four

以上查询仅示例。在我的实时查询中,在IN-Condition中有1000个值。

工作数据库:DB2

2 个答案:

答案 0 :(得分:3)

这是实现您期望的工作之一。

您可以将这些值移到表中,而不是对IN条件中的值进行硬编码。如果仅使用LEFT JOIN进行NULL检查,则可以获得不匹配的值。

SELECT MR.Col1
FROM MatchingRecords MR -- here MatchingRecords table contains the IN condition values
LEFT JOIN Table_A TA ON TA.Col1 = MR.Col1
WHERE TA.Col1 IS NULL;

Working DEMO

答案 1 :(得分:-1)

如果值要在语句字符串中列出而不是存储在表中,那么可能是对当前正在组合的值列表使用的语法的修订[显然,来自除TABLE之外的其他输入] IN谓词可以实现吗?以下针对值列表的修订语法既可以用于原始聚合查询[在下面显示为两个查询中的第一个],也可以用于询问方法代码的查询[第二个下面两个问题]:

Select count(*)
from TABLE_A
where Col1 in ( values('one'),('two'),('three'),('four') )
; -- report from above query follows:
COUNT ( * )
          2


[Bgn-Edit 2016年8月5日:在下面添加此文本和示例]
显然,至少有一个DB2变体在派生表的未命名列中无效,因此查询正好在下面的名称专栏;我选择了COL1,以匹配实际TABLE中的名称,但这不是必需的。 (col1)被添加到原始查询中,该查询保留原始预编辑版本;该版本在此编辑\插入后仍然存在,并且缺少此处添加的(col1)

select *
from   ( values('one'),('two'),('three'),('four') ) as x (col1)
except ( select * from table_a )
; -- report from above query follows:
COL1
three 
four  

以下是给出的原始查询,下面的注释表明在某个未声明的DB2变体上运行时未命名的列失败;我应该注意到这个SQL查询在DB2 for i 7.1上运行时没有错误
[结束编辑2016年8月5日]

select *
from   ( values('one'),('two'),('three'),('four') ) as x
except ( select * from table_a )
; -- report from above query follows:
VALUES
three 
four