表中没有哪些值?

Suk*_*tto 2 sql sql-server

我有一个值列表,并想知道表中还没有哪些值.(这是在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'
Run Code Online (Sandbox Code Playgroud)

我需要写一个返回'cat'和'dog'的查询.

SELECT foo
    FROM myTable
    WHERE foo ????? ( 'aaa', 'cat', 'bbb', 'dog' ) 
-- returns 'cat' and 'dog'
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法在查询中执行此操作?

由于应用程序与数据库交互的方式,我宁愿不创建临时表

And*_*mar 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
Run Code Online (Sandbox Code Playgroud)