我有一个表Test:
ID名称
1小鬼
1个关键
2小鬼
2 NA
3 NA
3 NAN
现在我要进行3个查询:
第一个需要找到具有Ony Imp但不是关键的ID:
预期输出:
ID名称
2小鬼
2 NA
第二个需要找到同时具有Imp和Critical的ID
预期输出:
ID名称
1小鬼
1关键
第三个需要找到既没有Imp也没有关键的ID
预期输出:
3 NA
3 NAN
我尝试过:
select * from test where name not in ('imp','critical')
但是它也给我ID 2。
我尝试在查询中添加IN和Not IN,但是由于某种原因,它不能为我提供正确的输出。
答案 0 :(得分:2)
您可以如下使用EXISTS和NOT EXISTS子句:
用于测试条件的表变量:
DECLARE @test TABLE (id INT, name VARCHAR(10))
INSERT INTO @test VALUES (1, 'Imp'), (1, 'Critical'), (2, 'Imp'), (2, 'NA'), (3, 'NA'), (3, 'NAN')
情况1-一种情况下存在,而另一种情况下不存在。
SELECT * FROM @test t
WHERE EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')
返回
2 Imp
2 NA
案例2-在两种情况下都存在
SELECT * FROM @test t
WHERE EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')
返回
1 Imp
1 Critical
情况3-两种情况都不存在
SELECT * FROM @test t
WHERE NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')
返回
3 NA
3 NAN