首页 > 解决方案 > 需要为 sql server 中的列检查多个条件

问题描述

我有一张桌子测试:

ID 名称
1 Imp
1 Critical
2 Imp
2 NA
3 NA
3 NAN

现在我想做 3 个查询:

第一个需要找到具有 Ony Imp 但不重要的 ID:

预期输出:

ID 名称
2 Imp
2 NA

第二需要找到同时具有 Imp 和 Critical 的 ID

预期输出:

ID 名称
1 Imp
1 关键

第三需要找到既没有 Imp 又没有 critical 的 ID

预期输出:

3 无
3 南

我试过:

  select * from test where name not in ('imp','critical')

但它也给了我 ID 2。

我试图在我的查询中添加 IN 和 Not IN 但不知何故它没有给我正确的输出。

标签: sqlsql-server-2008

解决方案


您可以使用 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

推荐阅读