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