我有一个列表或一组值,我想知道哪些值当前不存在于表中。我知道我可以找出哪些确实存在:
SELECT * FROM Table WHERE column1 IN (x,x,x,x,x)
该集合是我正在检查的值。有没有办法找出column1中哪些值不存在?基本上,我正在寻找上面的sql语句的反转。
这是一个报告,所以我需要的是不存在的值。
我有并且可以使用左连接并将值放在另一个表中,但我检查的值总是不同的,并且希望找到一个不涉及清除表并首先插入数据的解决方案。如果存在,我试图为我找到更好的解决方案。
答案 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)
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)