有对 (type_id, element_id),例如 (1,1), (1,2), .. (5,3)。如果我需要获取没有 element_id 1 的类型 ID,如何从结果中排除 type_id?
There are pairs (type_id, element_id), like (1,1), (1,2), .. (5,3). How to exclude type_id from result if I need to get type ids without element_id 1?
我有下一个tablex
:
id | type_id | element_id
-------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 3 | 1
6 | 4 | 2
7 | 5 | 3
我需要获取所有满足条件 element_id != 1
的类型 ID,换句话说如何获取下一个 type_ids: [4, 5]?
如果我简单地做 SELECT type_id FROM x WHERE element_id != 1
,我会收到 [1, 1, 4, 5]。
您可以尝试使用 HAVING
中的条件聚合函数,其中不包含 type_id
中的任何 element_id = 1
SELECT type_id
FROM x
GROUP BY type_id
HAVING COUNT(CASE WHEN element_id = 1 THEN 1 END) = 0
或者使用带聚合函数的过滤子句
SELECT type_id
FROM x
GROUP BY type_id
HAVING COUNT(*) FILTER (WHERE element_id = 1 ) = 0
我有下一个tablex
:
id | type_id | element_id
-------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 3 | 1
6 | 4 | 2
7 | 5 | 3
我需要获取所有满足条件 element_id != 1
的类型 ID,换句话说如何获取下一个 type_ids: [4, 5]?
如果我简单地做 SELECT type_id FROM x WHERE element_id != 1
,我会收到 [1, 1, 4, 5]。
您可以尝试使用 HAVING
中的条件聚合函数,其中不包含 type_id
element_id = 1
SELECT type_id
FROM x
GROUP BY type_id
HAVING COUNT(CASE WHEN element_id = 1 THEN 1 END) = 0
或者使用带聚合函数的过滤子句
SELECT type_id
FROM x
GROUP BY type_id
HAVING COUNT(*) FILTER (WHERE element_id = 1 ) = 0