MySQL跨表获取ID详情:match_world与teams_world关联查询问题排查
问题排查与修正方案
原SQL的核心问题
- 连接逻辑错误:你用
AND同时要求m.id_domicile = t.id_equipe和m.id_exterieur = t.id_equipe,但单条球队数据的id_equipe不可能同时等于两个不同的球队ID,这条条件永远无法匹配到有效数据。 - 字段选择错误:你查询的是
id_domicile和id_exterieur(球队ID),但需求是获取球队名称,应该选择teams_world表中的名称字段(假设字段名为nom_equipe,可根据实际表结构调整)。
修正后的SQL语句
SELECT m.id_match AS id, DATE_FORMAT(m.date_debut, '%d/%m/%Y') AS Date, t_home.nom_equipe AS Home, t_away.nom_equipe AS Away FROM match_world m INNER JOIN teams_world t_home ON m.id_domicile = t_home.id_equipe INNER JOIN teams_world t_away ON m.id_exterieur = t_away.id_equipe WHERE m.id_match = 1; -- 可选,若需指定查询id=1的比赛
关键说明
- 两次关联
teams_world表,分别用别名t_home(主队)和t_away(客队),分别匹配主队、客队的ID。 - 用
DATE_FORMAT函数将日期格式化为dd/mm/yyyy形式,匹配预期结果的日期格式。 - 通过
AS给字段起别名,让结果列名与预期完全一致。
内容的提问来源于stack exchange,提问作者oxem
相关产品推荐
相关产品推荐

