如何从包含user_id与i_id的表中筛选指定两个用户共有的i_id值
解决两个用户共有i_id的SQL查询问题
嘿,我明白你的需求了——你需要从interest_relations表中找出用户713870562和22131245共同拥有的i_id,之前的查询只是返回了这两个用户的所有i_id记录,没有筛选出交集对吧?
方法一:使用GROUP BY + HAVING筛选交集
这是最直接的方案,先过滤出目标用户的记录,再按i_id分组,筛选出分组内包含两个不同用户的i_id:
SELECT i_id FROM interest_relations WHERE user_id IN (713870562, 22131245) GROUP BY i_id HAVING COUNT(DISTINCT user_id) = 2;
逻辑说明:
WHERE user_id IN (...):先缩小范围,只保留两个目标用户的记录GROUP BY i_id:把相同i_id的记录归为一组HAVING COUNT(DISTINCT user_id) = 2:只有当分组里包含两个不同的用户ID时,才保留这个i_id(加DISTINCT是为了避免同一用户重复添加同一个i_id导致计数错误)
方法二:使用自连接查询交集
如果你更习惯用连接的方式,也可以通过表自连接来找到两个用户共有的i_id:
SELECT DISTINCT a.i_id FROM interest_relations a JOIN interest_relations b ON a.i_id = b.i_id WHERE a.user_id = 713870562 AND b.user_id = 22131245;
逻辑说明:
- 将表
interest_relations分别以a和b为别名进行连接 - 连接条件是
a.i_id = b.i_id,同时指定a是第一个用户,b是第二个用户 DISTINCT用来去除可能存在的重复行(如果表中有同一用户同一i_id的多条记录)
为什么你之前的查询没生效?
你之前的SQL是按user_id和i_id一起分组,这样每个(user_id, i_id)的组合都会被保留,相当于只是去重后列出了两个用户的所有i_id,并没有筛选出同时属于两个用户的交集。
以上两种方法都能得到你期望的结果:
i_id 6 7 8 9
内容的提问来源于stack exchange,提问作者Humanoid
相关产品推荐
相关产品推荐

