需要检查SQL服务器中一列的多个条件

时间:2019-05-22 05:48:23

标签: sql sql-server-2008

我有一个表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,但是由于某种原因,它不能为我提供正确的输出。

1 个答案:

答案 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