SQL查询,获取所有不具有给定状态值的id
SQL Query, get all ids that do not have a given status value
我有一个 table 调用状态,如下所示。每次用户登录时都会添加一行。添加了一个状态。我需要编写一个查询,一次为我提供所有 ID,这些 ID 从来都不是 1、6 或 8。
id
status
1
1
1
6
1
8
1
1
2
1
2
6
2
8
2
0
3
0
3
0
3
0
3
0
我写了一个查询:
SELECT DISTINCT(id) FROM statuses WHERE status NOT IN (1, 6, 8)
不幸的是,这给了我 ID 2 和 3,但我不想选择 ID 2,因为它们的状态为 1、6 和 8。
感谢您的帮助!
可以按id分组,在HAVING
子句中设置条件:
SELECT id
FROM statuses
GROUP BY id
HAVING SUM(status IN (1, 6, 8)) = 0
或者:
SELECT DISTINCT id
FROM statuses
WHERE id NOT IN (SELECT id FROM statuses WHERE status IN (1, 6, 8))
参见demo。
我有一个 table 调用状态,如下所示。每次用户登录时都会添加一行。添加了一个状态。我需要编写一个查询,一次为我提供所有 ID,这些 ID 从来都不是 1、6 或 8。
id | status |
---|---|
1 | 1 |
1 | 6 |
1 | 8 |
1 | 1 |
2 | 1 |
2 | 6 |
2 | 8 |
2 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
3 | 0 |
我写了一个查询:
SELECT DISTINCT(id) FROM statuses WHERE status NOT IN (1, 6, 8)
不幸的是,这给了我 ID 2 和 3,但我不想选择 ID 2,因为它们的状态为 1、6 和 8。
感谢您的帮助!
可以按id分组,在HAVING
子句中设置条件:
SELECT id
FROM statuses
GROUP BY id
HAVING SUM(status IN (1, 6, 8)) = 0
或者:
SELECT DISTINCT id
FROM statuses
WHERE id NOT IN (SELECT id FROM statuses WHERE status IN (1, 6, 8))
参见demo。