表中没有哪些值?

时间:2010-02-10 21:54:37

标签: 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'

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

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

在查询中有一种简单的方法吗?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

EXISTS就是事物(事实上并不存在)

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

不是最干净的方式,也不是最干净的方式。 Soehow,它可以工作。