SQL使用INNER JOIN多表查询出现重复WrestlerID列问题咨询
问题解答
首先明确结论:该问题和主键约束设置没有任何关系。
列重复的根本原因
你在SELECT子句中主动重复声明了三次WrestlerID字段作为输出列:
- 第一次查询WRESTLER表的
WrestlerID - 第二次查询SCHOOL表的
WrestlerID - 第三次重复查询了SCHOOL表的
WrestlerID
SQL会严格按照你指定的输出字段返回结果,即使三个字段的取值完全一致,也会生成三列独立的WrestlerID,这是SQL语法的标准执行逻辑,和表的约束规则无关。
额外说明:行重复的排查方向
如果你遇到的是同一个WrestlerID出现了多行重复记录的问题,也和主键约束无关,原因是:
CLUB、SCHOOL表都采用了联合主键,允许同一个WrestlerID对应多条记录(比如一个摔跤手同时加入多个俱乐部、关联多个学校),多表INNER JOIN时会产生交叉扩展:例如一个摔跤手关联2个学校、3个俱乐部,关联后就会返回2*3=6条同WrestlerID的记录。
解决方法
消除重复列
直接删除SELECT子句中多余的WrestlerID字段即可,关联条件已经保证三个表的WrestlerID取值完全一致,仅保留WRESTLER表的WrestlerID就足够,修改后的查询语句如下:
SELECT t1.WrestlerID, t1.WrestlerFirst, t1.WrestlerLast, t2.School, t3.Club FROM WRESTLER t1 INNER JOIN SCHOOL t2 ON t1.WrestlerID = t2.WrestlerID INNER JOIN CLUB t3 ON t1.WrestlerID = t3.WrestlerID;
消除重复行
如果同时存在行重复的问题,可以根据业务需求选择以下方案:
- 加
DISTINCT关键字对结果整体去重 - 按
WrestlerID分组,用聚合函数合并多值字段 - 调整关联逻辑,增加过滤条件限制返回的关联记录
内容的提问来源于stack exchange,提问作者PythonNewb
相关产品推荐
相关产品推荐

