MS Access查询name与score表出现数据重复,如何修改SQL代码解决
问题原因
你当前使用的SQL语句采用隐式交叉连接(FROM name, score无关联条件),会生成两个表所有行的笛卡尔积:即name表的每一行都会和score表的所有行逐一匹配,最终数据量是两个表行数的乘积,哪怕加了DISTINCT也无法解决关联逻辑错误导致的重复问题。
解决方法
两个表需要通过共同的关联字段绑定数据,通常name表会存储人员基础信息,带主键类的唯一标识字段(比如用户ID、学号),score表会存储对应人员的成绩,带同名字段作为外键关联。
修改后的SQL参考如下,你需要替换示例中的关联字段为你表中实际的共同标识字段即可:
SELECT score.score, name.Name FROM name INNER JOIN score ON name.你的关联字段名 = score.你的关联字段名;
补充说明
- 如果关联后存在完全重复的行,再保留
DISTINCT关键字即可,正常关联正确的情况下不需要额外去重 - 如果你需要输出所有name表的人员信息,哪怕该人员没有对应成绩,将
INNER JOIN替换为LEFT JOIN即可
内容的提问来源于stack exchange,提问作者Mahdi Dahir
相关产品推荐
相关产品推荐

