需要为 sql 服务器中的列检查 1 个以上的条件

Need to check more than 1 condition for a column in sql server

我有一个table测试:

ID 姓名
1 小鬼
1 严重
2 小鬼
2 不适用
3 不适用
3 南

现在我要进行 3 个查询:

1st需要找到有Ony Imp但不关键的ID:

预期输出:

ID 姓名
2 小鬼
2 不适用

2nd 需要找到同时具有 Imp 和 Critical 的 ID

预期输出:

ID 姓名
1 小鬼
1 严重

3rd 需要找到既没有 Imp 也没有关键的 ID

预期输出:

3 不适用
3 南

我试过了:

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

但它也给了我 ID 2。

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

您可以使用 EXISTS 和 NOT EXISTS 子句,如下所示:

Table 测试条件变量:

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')

Returns

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')

Returns

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')

Returns

3   NA
3   NAN