Мне нужна помощь в SQL относительно этой базы данных https://www.kaggle.com/hugomathien/soccer. Мне нужен оператор SQL, который дает таблицу с названием домашней и гостевой команд для случайной игры (я выбрал Match.match_api_id = 492476) Если я запускаю это:
SELECT Team.team_long_name , Match.home_team_api_id
FROM Team JOIN Match
ON Match.away_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
Я получаю название гостевой команды, но не название домашней команды (вместо этого я получаю значение Match.home_team_api_id, как и ожидалось). Если я бегу:
SELECT Team.team_long_name , Match.away_team_api_id
FROM Team JOIN Match
ON Match.home_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
Я получаю название команды хозяев, но не название команды гостей (вместо этого я получаю значение Match.away_team_api_id, как и ожидалось). Проблема в том, что оба внешних ключа Match.home_team_api_id и Match.away_team_api_id соответствуют : Team.team_api_id , поэтому, когда я получаю один, я «теряю» другой.
Есть ли оператор SQL, чтобы получить как название домашней команды, так и название выездной команды случайного совпадения в одной таблице?
🤔 А знаете ли вы, что...
SQL можно использовать для создания резервных копий и восстановления данных.
Вы можете присоединиться к таблице Team
дважды, один раз за команду гостей и один раз за команду хозяев. Псевдонимы для таблиц помогают отслеживать, что есть что. Что-то вроде:
SELECT
hometeam.team_long_name homename,
Match.home_team_api_id,
awayteam.team_long_name awayname,
Match.away_team_api_id
FROM Match INNER JOIN Team hometeam
ON Match.home_team_api_id = hometeam.team_api_id
INNER JOIN Team awayteam
ON Match.away_team_api_id = awayteam.team_api_id
WHERE Match.match_api_id = 492476
Во-первых, если критерии выбора касаются исключительно стола Match
, это должен быть первый стол, который вы упомянули.
Во-вторых, вам разрешено использовать JOIN
(или INNER JOIN
, как чаще пишут) более одного раза.
SELECT T1.team_long_name as Away_team_long_name,
T2.team_long_name as Home_team_long_name
FROM Match
INNER JOIN Team as T1
ON Match.away_team_api_id = T1.team_api_id
INNER JOIN Team as T2
ON Match.home_team_api_id = T2.team_api_id
WHERE Match.match_api_id = 492476;
Перефразируя это как человеческую процедуру:
match_api_id
, чтобы найти строку Match
в таблице Match
.away_team_api_id
из строки Match
и используйте ее для поиска команды в таблице Team
. Сообщите team_long_name
этой команды как полное название команды гостей.home_team_api_id
из строки Match
и используйте ее для поиска команды в таблице Team
. Сообщите team_long_name
этой команды как длинное название домашней команды.