我有两个子查询,它们会产生一个赛程列表,以及一个用户具有管理员权限的球队列表。
我可以这样做,必须为团队列表调用相同(相当复杂(的子查询两次,如下所示:
(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
有没有办法使用团队列表查询的别名来执行此操作,而不必执行两次?
MySQL 8.0引入了对Common Table Expressions(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 ...
对于 8.0 之前的 MySQL 版本,不支持 CTE 的版本,无法多次引用相同的内联视图。