【发布时间】:2020-01-31 02:44:00
【问题描述】:
我有两个子查询,它们会产生一个固定装置列表和一个用户拥有管理员权限的团队列表。
我可以这样做,必须为团队列表调用两次相同(相当复杂)的子查询,如下所示:
(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 版本中真正做到这一点,它们添加了对 CTE 的支持。在此版本之前,唯一真正的选择是创建一个表(虽然不是真正的 TEMPORARY 表),用子查询的结果填充它,并使用该表代替子查询,然后在完成后删除中间表。 .. 并且您需要注意多个客户端不会同时尝试执行此操作(至少使用相同的中间表名称)。