#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. это решение читается лучше для меня, но выполняется немного медленнее, чем рекомендация выше.