我有一个值列表,并想知道表中还没有哪些值。 (这是在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'
在查询中有一种简单的方法吗?
由于应用程序与数据库交互的方式,我宁愿不要创建临时表
答案 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,它可以工作。