我有以下许多表team\u用户,数据如下:
TEAM_ID USER_ID
1 10
1 3
1 4
1 11
12 10
12 3
12 4
11 3
11 4
18 10
18 7
18 4
18 11
所以,我想得到只有两个用户在(3,4)中有用户id的team\u id,在本例中是team 11。但是我得到了1队,11队和12队。我只想要11队。
我做了以下代码,但我没有得到预期的结果
SELECT team_id
FROM team_users
WHERE user_profile_id IN (3 , 4)
GROUP BY team_id
HAVING COUNT(DISTINCT user_profile_id) = 2;
此查询的结果是:
TEAM_ID
1
11
12
所以,如果你能帮上忙,我将不胜感激。
================编辑:列表是唯一的,没有重复项
4条答案
按热度按时间66bbxpm51#
将where条件移到条件聚合中。
只要team\u id/user\u profile\u id的组合是唯一的:
hc8w905p2#
你的
where
子句筛选出user_profile_id
不是3
或者4
在你有机会考虑他们之前。你可以把逻辑移到having
子句,例如:这是假设
(team_id, user_profile_id)
元组在数据中是唯一的,如示例数据所示。ymzxtsji3#
将所有筛选移到
where
条款:这将检查是否有两个成员,并且它们是两个指定的成员。此外,这假设没有重复,这似乎是合理的。
你也可以用
LISTAGG()
假设列表不太大:lskq00tm4#
您可以为where子句提供和条件,以便只获取结果
team_id = 11
```SELECT team_id
FROM team_users
WHERE user_profile_id IN (3 , 4) AND team_id = 11
GROUP BY team_id
HAVING COUNT(DISTINCT user_profile_id) = 2;