如何通过SQL查询在一行返回比赛中两名球员的完整数据?
解决方法:给关联表加别名区分
你写的SQL跑不通,核心原因是两次关联同一个Players表却没给表起别名,数据库分不清这两个Players实例,要么直接报错,要么返回的结果完全不对。
正确的写法是给每次关联的Players表分配不同的别名,比如用p1对应比赛里的第一个球员,p2对应第二个,然后明确指定要查询的字段(别用SELECT *,不然相同字段名会重复冲突):
SELECT m.*, -- 第一个球员的信息,给字段加前缀区分 p1.Player_ID AS Player1_ID, p1.Name AS Player1_Name, p1.Age AS Player1_Age, -- 第二个球员的信息 p2.Player_ID AS Player2_ID, p2.Name AS Player2_Name, p2.Age AS Player2_Age FROM Matches m JOIN Players p1 ON m.Player1_ID = p1.Player_ID JOIN Players p2 ON m.Player2_ID = p2.Player_ID
几点补充:
- 表别名可以随意命名,只要能区分开就行,比如用
player_a、player_b也没问题 - 如果确实要查询
Players的全部字段,可以写p1.*, p2.*,但还是推荐显式列出字段,避免后续表结构变动时出现意外问题 - 要是存在球员ID为空的情况(比如比赛没凑齐人),可以把
JOIN换成LEFT JOIN,这样即使其中一个球员数据不存在,也能返回比赛的其他信息
内容的提问来源于stack exchange,提问作者aRA
相关产品推荐
相关产品推荐

