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

SQL WHERE IN实现交集查询:获取匹配所有指定userId的ID方法

解决「获取与所有指定用户ID都存在映射关系的目标ID」问题

我明白你要的是那种“必须和WHERE子句里每一个userId都有对应映射”的ID,而不是和其中任意一个匹配的——这种需求其实用分组统计+过滤就能搞定,完全不用折腾逐个处理再合并,效率还更高!

先假设我们的表结构

假设你有一张映射表(比如叫user_target_mapping),字段是:

  • target_id:你最终要获取的目标ID
  • user_id:用户ID,用来关联目标ID

核心解决方案思路

  1. 先筛选出所有和指定用户ID相关的映射记录
  2. 按target_id分组,统计每个目标ID关联的不同用户ID数量
  3. 只保留那些统计数量等于「指定用户ID总数」的目标ID——这就意味着这个目标ID和所有指定用户都有映射关系

对应SQL示例

示例1:当userId IN (1,2,3)时

SELECT target_id
FROM user_target_mapping
WHERE user_id IN (1, 2, 3)
GROUP BY target_id
HAVING COUNT(DISTINCT user_id) = 3;

这里的3就是你IN子句里用户ID的总数,执行后会得到唯一符合要求的target_id=1。

示例2:当userId IN (2,3)时

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

此时统计数量等于2的target_id就是1和2,完全符合你的预期结果。

额外优化点

  • 如果你的映射表不会出现重复的(user_id, target_id)组合(也就是同一个用户和同一个目标ID只会有一条记录),那可以去掉DISTINCT,直接用COUNT(user_id),这样查询效率会更高。
  • 如果是在应用程序里动态传入用户ID列表,你可以先计算列表的长度,再把这个数值代入HAVING子句,不用手动修改数字,非常灵活。

内容的提问来源于stack exchange,提问作者Arman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:27:23