SQL Server:查找表中不存在的值

时间:2010-05-21 21:40:07

标签: sql sql-server

我有一个列表或一组值,我想知道哪些值当前不存在于表中。我知道我可以找出哪些确实存在:

SELECT * FROM Table WHERE column1 IN (x,x,x,x,x)

该集合是我正在检查的值。有没有办法找出column1中哪些值不存在?基本上,我正在寻找上面的sql语句的反转。

这是一个报告,所以我需要的是不存在的值。

我有并且可以使用左连接并将值放在另一个表中,但我检查的值总是不同的,并且希望找到一个不涉及清除表并首先插入数据的解决方案。如果存在,我试图为我找到更好的解决方案。

6 个答案:

答案 0 :(得分:4)

您也可以使用EXCEPT以及OUTER JOIN,例如

SELECT * FROM
(
SELECT -1 AS N
UNION 
SELECT 2 AS N
) demo 
EXCEPT 
SELECT     number
FROM         spt_values

答案 1 :(得分:3)

WITH    q(x) AS
        (
        SELECT  x1
        UNION ALL
        SELECT  x2
        UNION ALL
        SELECT  x3
        )
SELECT  x
FROM    q
WHERE   x NOT IN
        (
        SELECT  column1
        FROM    [table]
        )

答案 2 :(得分:1)

  • 将要检查的值放在表A
  • LEFT OUTER将表A加入表WHERE Table.column1 IS NULL

    SELECT column1 从A LEFT OUTER JOIN 表 ON A.column1 = Table.column1 Table.column1 IS NULL

这只会显示A中存在但不存在于表中的行。

答案 3 :(得分:1)

由于你想要在结果中设置一些值,并且你不能从表中获取它们(因为你想要那些不存在的那些),你必须把它放在某种类型中表格或结果,以便您可以将其用作来源。

例如,您可以创建一个临时结果,您可以加入该表以过滤掉表中存在的结果:

select set.x
from (
  select 1 as x union all
  select 2 union all
  select 3 union all
  select 4 union all
  select 5
) as set
left join Table as t on t.column1 = set.x
where t.columnn1 is null

答案 4 :(得分:-1)

你可以做到的一种方法是: SELECT * FROM表WHERE column1 NOT IN(...);

答案 5 :(得分:-1)

使用NOT运算符:

SELECT * FROM Table WHERE column1 NOT IN(x,x,x,x,x)