Запрос MYSQL для отображения названия команды гостей и названия команды хозяев

#mysql

#mysql

Вопрос:

У меня есть две таблицы.
игры включают в себя Date, hteam, ateam, hscore, ascore.
команды включают идентификатор, tname.

Этот запрос:

 SELECT
    games.DATE,
    teams.tname AS "Away",
    games.ascore AS "A Score",
    games.hteam AS "Home",
    games.hscore AS "H Score"
FROM
    games
INNER JOIN teams ON games.ateam = teams.id
LEFT OUTER JOIN teams AS t
ON
    games.hteam = t.tname
ORDER BY
    games.DATE ASC
  

в итоге получается такой результат:

 DATE Ascending 1        Away        A Score Home    H Score     
2008-01-01 20:00:00     Saxons      2       3       0
2008-01-01 20:00:00     Spurs       0       1       1
2008-01-08 20:00:00     Saxons      1       2       2
2008-01-08 20:00:00     Celtics     1       1       1
  

Мой вопрос в том, как мне отобразить домашнюю команду в виде ее названия, а не ее идентификатора, чтобы результат был:

 DATE Ascending 1        Away        A Score Home        H Score     
2008-01-01 20:00:00     Saxons      2       Celtics     0
2008-01-01 20:00:00     Spurs       0       Wanderers   1
2008-01-08 20:00:00     Saxons      1       Spurs       2
2008-01-08 20:00:00     Celtics     1       Wanderers   1
  

Ответ №1:

Вам нужно выполнить другое объединение с таблицей «команды», чтобы получить свой результат. Итак, что-то вроде :

 SELECT
    games.DATE,
    teams_away.tname AS "Away",
    games.ascore AS "A Score",
    teams_home.tname AS "Home",
    games.hscore AS "H Score"
FROM
    games
INNER JOIN teams teams_away ON games.ateam = teams_away.id
INNER JOIN teams teams_home ON games.hteam = teams_home.id
ORDER BY
    games.DATE ASC
  

Ответ №2:

Вот способ написания запроса с использованием подзапросов, который позволяет избежать объединений:

 SELECT
    games.DATE,
    (SELECT tname FROM teams WHERE teams.id = games.hteam) AS "Away",
    games.ascore AS "A Score",
    (SELECT tname FROM teams WHERE teams.id = games.ateam) AS "Home",
    games.hscore AS "H Score"
FROM
    games
ORDER BY
    games.DATE ASC
  

Комментарии:

1. это решение читается лучше для меня, но выполняется немного медленнее, чем рекомендация выше.