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

3

我有一组值,想知道哪些值目前不存在于表格中。我知道可以通过以下方式找到已经存在的值:

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

这里的“set”是我要检查的值。有没有办法找出该集合中哪些值不存在于column1列中?基本上,我正在寻找与上述SQL语句相反的操作。

由于这是一份报告,所以我只需要返回不存在的值。

我可以通过左连接并将这些值放入另一个表中来实现这一点,但我要检查的值总是不同的,希望找到一种不涉及清空表格和先插入数据的解决方案。如果存在更好的解决方案,我将尝试找到它。


你使用哪个版本的 SQL Server - Quassnoi
6个回答

4

您也可以使用EXCEPT以及外连接,例如。

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

我需要进行一些正则表达式解析来构建 Union 语句,但是这个方法效果很好。 - MacAnthony

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]
        )

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

1
  • 将要检查的值放入表格 A 中
  • 使用 LEFT OUTER JOIN 将表格 A 与您的 Table 进行连接 WHERE Table.column1 IS NULL

    SELECT column1 FROM A LEFT OUTER JOIN Table ON A.column1 = Table.column1 WHERE Table.column1 IS NULL

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


是的,我已经做过这个了,但这是我经常要做的事情,数据也非常临时 - 把它放到另一个表中并运行查询不是很方便。希望有一个单一的查询解决方案。 - MacAnthony
可以这样做,只需使用选择语句而不是表A。 - Konerak
@MacAnthony - 没有单一的查询解决方案。查询从表中提取数据,因此,数据必须在表中才能返回查询结果。 - Donnie
没错,你可以使用子查询来代替创建表格,就像Mark Byers所展示的那样。 - Konerak
除非你想使用动态数量的UNION将一堆单行查询转换成一个表,否则不能使用子查询来将集合转换为表。 - Donnie
显示剩余2条评论

-2

你可以采取的一种方法是: 从表中选择不在(...)内的列。


-2

使用 NOT 运算符:

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


2
不,这将选择所有列中不在列表中的行。想象一下他有一个列表'A B C D E',他想看到这5个字符中哪些没有出现在表格中。你的回复可以给他'F G H',而他可能想看到'C D'如果它们不存在。 - Konerak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接