You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:38