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

SQLite JOIN查询返回重复结果的问题求助

嘿,我来帮你捋清楚这个问题~

首先,咱们先看看为什么会返回3行结果:你的users表中,user_id为923828395且group_id为1的记录有两条(对应Alpha和Gamma两个house_name)。而你当前的JOIN条件只关联了user_id,这就意味着points表中那条923828395+group1+term02078e51的记录,会和users表中这两条记录分别匹配,自然就多出了一行重复的积分数据。

你之前调整WHERE子句没用,是因为WHERE是在JOIN完成后过滤结果,而JOIN已经生成了3行符合WHERE条件的记录,所以改WHERE不会改变行数。问题的核心是JOIN的关联条件不够严谨。

这里给你两种解决方案,根据你的实际需求选:

方案一:严格关联用户和组的对应关系(推荐)

因为用户的积分是和group绑定的,house也是和group绑定的,所以JOIN时不仅要匹配user_id,还要匹配group_id,确保每个积分记录只对应所属组的house信息。如果同一个用户+组下有多个house_name(比如你的数据里的情况),可以用聚合函数取其中一个(比如MAX或MIN):

SELECT 
  users.user_id, 
  MAX(users.house_name) AS house_name, -- 取该用户+组下的任意一个house_name,按需换MIN
  points.points, 
  points.group_id, 
  points.term_id
FROM users
JOIN points ON points.user_id = users.user_id AND points.group_id = users.group_id -- 新增group_id关联
WHERE points.term_id = "02078e51" AND points.group_id = "1"
GROUP BY users.user_id, points.points, points.group_id, points.term_id

方案二:直接去重(适合只需要唯一记录的场景)

如果除了house_name之外,其他字段都完全重复,也可以用DISTINCT直接去重:

SELECT DISTINCT
  users.user_id, 
  users.house_name, 
  points.points, 
  points.group_id, 
  points.term_id
FROM users
JOIN points ON points.user_id = users.user_id AND points.group_id = users.group_id
WHERE points.term_id = "02078e51" AND points.group_id = "1"

这两种方案都能得到你期望的2行结果。另外,如果你觉得users表中同一个用户+组出现多条house_name是不合理的,可能需要检查数据是否存在冗余,从根源上解决问题哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:19:04