在 MySQL 中加入相同的子查询两次

Sim*_*ton 2 mysql alias subquery

我有两个子查询会生成一个灯具列表,以及一个用户拥有管理员权限的团队列表。

我可以这样做,必须为团队列表调用相同的(相当复杂的)子查询两次,如下所示:


(SELECT hometeam, awayteam etc... ) as fixtures

LEFT JOIN (SELECT team_id, admin etc... ) as teams1 ON fixtures.hometeam = teams1.team_id
LEFT JOIN (SELECT team_id, admin etc... ) as teams2 ON fixtures.awayteam = teams2.team_id
Run Code Online (Sandbox Code Playgroud)

有没有办法使用团队列表查询的别名而不必执行两次?

spe*_*593 5

MySQL 8.0 引入了对公用表表达式 (CTE) 的支持

请注意,这在早期版本的 MySQL 中不受支持,即在 5.7、5.6、

https://dev.mysql.com/doc/refman/8.0/en/with.html

像这样:

WITH
  teams AS (SELECT team_id, admin etc... )
SELECT ...
  FROM (SELECT hometeam, awayteam etc... ) AS fixtures
  LEFT
  JOIN teams t1 
    ON t1.team_id = fixtures.hometeam
  LEFT 
  JOIN teams t2
    ON t2.team_id = fixtures.awayteam
 WHERE ...
Run Code Online (Sandbox Code Playgroud)

对于 MySQL 8.0 之前的版本,不支持 CTE 的版本,没有办法多次引用同一个内联视图。