MySQL:如何用Join替代子查询实现查询需求
用JOIN替代子查询的改写方案
没问题,咱们把你这段SQL里的子查询换成JOIN写法,这样代码更易读,性能表现也会更稳定~
首先先指出原查询里的一个小冗余:你在FROM里写了teams表,但实际上这个表并没有和games做关联,属于多余的笛卡尔积关联,完全可以去掉。
接下来,因为你需要同时获取主客场两支球队的名称,我们只需要两次关联同一个teams表,给它不同的别名来区分主客队即可,具体改写后的SQL如下:
SELECT games.id, games.team_home, games.score_home, games.team_away, games.score_away, t1.name AS t1, t2.name AS t2 FROM games INNER JOIN teams t1 ON games.team_home = t1.id INNER JOIN teams t2 ON games.team_away = t2.id WHERE games.date_game = '2018-06-15' GROUP BY games.id
补充说明:
- 这里用
INNER JOIN(简写为JOIN也可以)分别关联主客队的ID和球队表的ID,通过t1和t2两个别名区分两次关联的球队表,直接获取对应名称。 - 如果
games.id是表的主键,那最后的GROUP BY games.id其实可以省略,因为主键本身是唯一的,分组不会改变结果集;如果保留也完全没问题,不影响运行。
内容的提问来源于stack exchange,提问作者Abdes
相关产品推荐
相关产品推荐

