提问人:Volodymyr 提问时间:4/19/2020 更新时间:4/19/2020 访问量:25
MySQL的。多对多表。选择仅访问其他用户的特定组的用户组
MySQL. Many-to-many table. Select group of users who visited only specific group of another users
问:
我有具有多对多关系的表“查看器”
user_id1 - 整数 - 执行访问操作的用户
user_id2 - 整数 - 其个人资料访问过的用户
我必须选择一组user_id1(谁采取了行动),他们只访问了user_id2组中的特定个人资料
EXAMPLE DATASET
> user_id1 | user_id2
>
> 1 | 30
>
> 1 | 40
>
> 1 | 50
>
> 2 | 30
>
> 2 | 40
>
> 10 | 40
>
> 10 | 50
>
> 11 | 30
>
> 11 | 40
>
> 11 | 50
>
> 12 | 50
>
> 12 | 60
>
> 12 | 70
>
> 13 | 30
>
> 13 | 40
>
> 13 | 50
>
> 13 | 60
>
> 14 | 90
>
> 14 | 95
>
> 14 | 98
我必须选择user_id1从ID可能包含“30”、“40”、“50”(一次)的user_id2查看个人资料的人
我试图让它像,但它不起作用
SELECT
t.user_id1,
t.user_id2
FROM viewers t
WHERE
t.user_id2 in (select distinct t.user_id2 from viewers t WHERE t.user_id2 = 30)
AND t.user_id2 in (select distinct t.user_id2 from viewers t WHERE t.user_id2 = 40)
AND t.user_id2 in (select distinct t.user_id2 from viewers t WHERE t.user_id2 = 50)
答:
0赞
forpas
4/19/2020
#1
您可以筛选表中的搜索 ID,按user_id分组,并在 having 子句中设置条件:
select user_id1
from viewers
where user_id2 in (30, 40, 50)
group by user_id1
having count(distinct user_id2) = 3;
观看演示。
结果:
| user_id1 |
| -------- |
| 1 |
| 11 |
| 13 |
如果您想要仅访问这 3 个用户的用户user_ids,则:
select user_id1
from viewers
group by user_id1
having count(distinct user_id2) = 3
and sum(user_id2 not in (30, 40, 50)) = 0;
观看演示。
结果:
| user_id1 |
| -------- |
| 1 |
| 11 |
评论