需要为 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
我有一个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