2010-05-21 81 views
3

我有一個或一組值,我想知道哪些值當前不存在於表中。我知道我可以找出哪些存在與:SQL Server:查找表中不存在的值

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

該集是我檢查的值。有沒有辦法找出該列中哪些值不存在於column1中?基本上,我正在尋找上面的sql語句的反例。

這是爲了報告,所以我需要的是不存在的值將被返回。

我有和可以做這個左連接,並將值放在另一個表中,但我檢查的值總是不同,並希望找到一個解決方案,不涉及清理表和插入數據第一。試圖找到一個更好的解決方案,如果有的話。

+0

你使用哪種版本的SQL'的Server'? – Quassnoi 2010-05-21 21:54:43

+0

這一張是2005 – MacAnthony 2010-05-21 21:57:51

回答

4

您還可以使用EXCEPT還有OUTER JOIN例如

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

+1,很高雅 – Quassnoi 2010-05-21 21:58:53

+0

我有一些正則表達式解析來構建union語句,但是這很有效。 – MacAnthony 2010-05-21 22:08:09

1
  • 把你要檢查表格中的
  • LEFT OUTER JOIN表一個對你的表值,其中Table.column1 IS NULL

    SELECT列1 從 LEFT OUTER JOIN 表 ON A.column1 = Table.column1 WHERE Table.column1 IS NULL

這將只顯示存在於A中但不在表中的行。

+0

是的,我已經這樣做了,但這是我必須經常做的事情,數據實際上是暫時的 - 將它放在另一個表中並對其執行查詢並不是很方便。希望獲得單一的查詢解決方案。 – MacAnthony 2010-05-21 21:48:13

+0

這是可能的,只需使用select語句而不是表A。 – Konerak 2010-05-21 21:49:01

+0

@MacAnthony - 沒有單一的查詢解決方案。查詢將數據從表中提取出來,因此,數據必須位於表中才能使查詢返回。 – Donnie 2010-05-21 21:49:54

-1

您可以執行此操作的一種方法是: SELECT * FROM表WHERE column1 NOT IN(...);

-1

使用NOT:

SELECT * FROM表其中COLUMN1 NOT(X,X,X,X,X)

+1

不,這將選擇列不在列表中的所有行。想象一下,他有一個名單'A B C D E',他想看看這5個字符中哪一個沒有出現在表格中。你的答覆可以給他'F G H',而他也許想看到'C D',如果那些不存在的話。 – Konerak 2010-05-21 21:45:42

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 
相關問題