如何用SQL连接两张不匹配的表?球员与国家表关联异常求助
问题原因与解决方法
问题根源
你当前的JOIN条件country.id=player.id完全错误——player表的id是球员的自增主键(取值1、2...11075),而country表的id是国家的独立主键(取值1、1729、24558等),两者没有任何对应逻辑,所以只有player.id=1时能匹配到country.id=1的比利时,其余行自然匹配不到,返回None。
正确关联方式
情况1:player表存在国家关联字段
如果player表中遗漏了类似country_id的字段(用于存储球员所属国家的id),修改JOIN条件为该字段与country表的id关联即可,示例代码:
pd.read_sql(""" select player.id, player.player_name, player.birthday, country.country_name from player left join country on country.id = player.country_id """, conn)
情况2:需要中间关联表
如果player表本身没有直接关联国家的字段,说明数据库里大概率存在球员-国家关联表(比如player_country),用于建立球员和国家的映射关系。假设关联表用player_api_id关联球员,用country_id关联国家,示例代码:
pd.read_sql(""" select p.id, p.player_name, p.birthday, c.country_name from player p left join player_country pc on p.player_api_id = pc.player_api_id left join country c on pc.country_id = c.id """, conn)
额外建议
先检查player表的完整结构,确认是否有未注意到的国家相关字段;如果没有,查看数据库中是否存在其他关联球员与国家的表。
内容的提问来源于stack exchange,提问作者Mohd Aziz
相关产品推荐
相关产品推荐

