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

如何从包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:04:06