SQL中WHERE IN子句如何匹配多列子查询中的单列数据
解决WHERE IN子查询多列匹配问题
你当前的子查询返回了hacker_id和聚合统计列两列,但IN子句要求子查询必须返回单列,所以无法正确匹配。要让WHERE IN只匹配结果集中的hacker_id列,只需修改子查询,让它仅返回hacker_id这一列即可。
修改后的完整查询示例
select hacker_id, name from hacker_t where hacker_id in ( select hacker_t.hacker_id from hacker_t group by hacker_t.hacker_id -- 如果你需要基于count值筛选,比如只保留count=2的hacker,可添加HAVING子句 having count(hacker_t.score) = 2 );
关键说明
- 子查询必须只返回
hacker_id列,这样IN才能明确用该列与外层的hacker_id做匹配 - 因为使用了
count()聚合函数,子查询必须加上GROUP BY hacker_id来按用户分组统计 - 如果需要对统计结果做筛选(比如只保留有2条score记录的用户),通过
HAVING子句实现,不要用WHERE(WHERE不能直接过滤聚合结果)
内容的提问来源于stack exchange,提问作者v_head
相关产品推荐
相关产品推荐

