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
相关产品推荐
相关产品推荐

