2010-02-10 23 views
2

我有一個值列表,並且想知道表中不存在哪些值。 (這是SQL Server 2000上)以下哪些值不在表格中?

考慮以下幾點:

CREATE TABLE myTable (foo VARCHAR(10)) 
GO 

INSERT INTO myTable 
     (foo 
     ) 
     SELECT 'aaa' 
     UNION ALL SELECT 'bbb' 
     UNION ALL SELECT 'ccc' 
GO 

SELECT foo 
    FROM myTable 
    WHERE foo IN ('aaa', 'cat', 'bbb', 'dog') 
-- returns 'aaa' and 'bbb' 

我需要寫一個返回 '貓' 和 '狗' 的查詢。

SELECT foo 
    FROM myTable 
    WHERE foo ????? ('aaa', 'cat', 'bbb', 'dog') 
-- returns 'cat' and 'dog' 

是否有一種簡單的方法可以在查詢中執行此操作?

由於方式的應用程序與數據庫交互,我寧願沒有,比方說,創建臨時表

+0

是值的列表小?如果是這樣,那麼您可以簡單地從數據庫中獲取已存在的數據,然後在應用程序中進行過濾,而不會導致性能明顯下降。 – Journey

回答

6

您可以構建一個表union all和加入的是,在未通過聯接匹配的行過濾:

SELECT  myList.foo 
FROM  (
       SELECT 'aaa' as foo 
       UNION ALL SELECT 'cat' 
       UNION ALL SELECT 'bbb' 
       UNION ALL SELECT 'dog' 
      ) myList 
LEFT JOIN myTable 
ON   myTable.foo = myList.foo 
WHERE  myTable.foo is null 
0

EXISTS的東西(NOT EXISTS,其實)

select foo from myTable 
WHERE NOT EXISTS (select 1 from myTable where foo in('cat', 'dog')); 

不最乾淨的方式,既不乾淨也不乾淨。所以,它可以工作。

+1

如果我已經知道要搜索哪些特定搜索...我不需要此查詢:-) – Sukotto

+0

對不起,您是對的。快速閱讀=不完整的東西 * alfabravo腮紅* – Alfabravo

相關問題