Ну, если вы действительно хотите, ничего не меняя, получить все одним SQL, то вот пример:
SELECT t1.name, date_games.datetime, t2.name
FROM date_games
INNER JOIN games AS g1 ON g1.id_game = date_games.id_game
INNER JOIN games AS g2 on g2.id_game = date_games.id_game AND g1.id_team <> g2.id_team
INNER JOIN teams AS t1 on t1.id_team = g1.id_team
INNER JOIN teams AS t2 on t2.id_team = g2.id_team
GROUP BY date_games.id_game;
Хотя толк в этом будет, только если вы индексы соответствующие расставите.
Если же в игре могут принимать только две команды, то почему бы не объединить две записи из games в одну? Т.е. будет три поля: id_game
, id_first_team
, id_second_team
.
Тогда от джойна g2
мы отказываемся, а таблицы t1
и t2
джойним по полям id_first_team
и id_second_team
соответственно.
Следующий шаг - почему бы не объединить таблицы games
и date_games
? Тогда будет всего два джойна.
Если же по каким-то причинам этого делать нельзя, то действительно ли это является причиной? Может быть, можно обойтись и двумя таблицами? Приведите пример, почему нельзя этого сделать и, может быть, я приведу пример реализации, как можно будет обойтись и двумя таблицами.
UPD: еще один вариант:
SELECT date_games.*, GROUP_CONCAT(teams.name) AS teams_in_game
FROM date_games
INNER JOIN games ON games.id_game = date_games.id_game
INNER JOIN teams ON teams.id_team = games.id_team;
Но здесь придется в коде выделять названия двух команд в GROUP_CONCAT.