Присоединение к одному и тому же подзапросу дважды в MySQL - PullRequest
0 голосов
/ 01 октября 2019

У меня есть два подзапроса, которые приводят к списку приборов и списку команд, для которых у пользователя есть права администратора.

Я могу сделать это, дважды вызвав один и тот же (довольно сложный) подзапрос для списка команд, например:


(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

Есть ли способ сделать это, используя псевдоним длязапрос списка команд без необходимости выполнять его дважды?

1 Ответ

3 голосов
/ 01 октября 2019

В 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 ...

Для версий MySQL до 8.0, версий, которые не поддерживают CTE, нет способа ссылаться на один и тот же встроенный просмотр несколько раз.

...