You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何编写SELECT查询语句筛选同时属于group_id 2和3的user_id

假设你的数据表名为user_group,可使用以下两种常用的SQL写法实现需求:

写法1:分组统计子查询

SELECT user_id, group_id
FROM user_group
WHERE user_id IN (
    SELECT user_id
    FROM user_group
    WHERE group_id IN (2, 3)
    GROUP BY user_id
    HAVING COUNT(DISTINCT group_id) = 2
);

逻辑说明:内层子查询先筛选group_id为2或3的记录,按user_id分组后统计去重后的group_id数量,数量等于2的就是同时拥有两个group的用户;外层查询直接取出这些用户的所有关联记录。
如果你的表中同一个user_id和group_id不会存在重复记录,可以去掉DISTINCT关键字,直接写COUNT(group_id) = 2,查询性能更好。
如果你只需要返回这些用户的group_id为2和3的记录(和你给出的预期结果完全一致),可以在外层WHERE条件中额外加AND group_id IN (2, 3)即可。

写法2:EXISTS双重校验

SELECT ug1.user_id, ug1.group_id
FROM user_group ug1
WHERE 
    EXISTS (SELECT 1 FROM user_group ug2 WHERE ug2.user_id = ug1.user_id AND ug2.group_id = 2)
    AND EXISTS (SELECT 1 FROM user_group ug3 WHERE ug3.user_id = ug1.user_id AND ug3.group_id = 3);

逻辑说明:直接校验当前用户是否同时存在group_id=2和group_id=3的记录,符合条件的用户的所有关联记录都会被返回。如果你的表中user_id和group_id建有联合索引,该写法的查询效率会更高。


内容的提问来源于stack exchange,提问作者Kiều Toàn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 06:06:06