Нормализовать идентификатор, где 2 FK существуют в строке - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать представление, чтобы нормализовать «Спортивные матчи», однако у меня есть идентификатор домашней команды и команды гостей подряд в таблице матчей.При попытке нормализовать их, как я могу получить название команды соответствующей команды?

select cast(`f`.`datetime` as date) AS `date`
     , cast(`f`.`datetime` as time) AS `time`
     , (select `t`.`name` 
        from (`fixturef_testing`.`teams` `t` 
        join `fixturef_testing`.`fixtures` `f` 
          on((`f`.`hometeamid` = `t`.`id`))) 
        where (`t`.`id` = `f`.`hometeamid`)) AS `hometeam`
     , (select `t`.`name` 
        from (`fixturef_testing`.`teams` `t` 
        join `fixturef_testing`.`fixtures` `f` 
          on((`f`.`awayteamid` = `t`.`id`))) 
        where (`t`.`id` = `f`.`awayteamid`)) AS `awayteam`
     , `u`.`name` AS `referee`,`c`.`name` AS `competition` 
from ((`fixturef_testing`.`fixtures` `f` 
left join `fixturef_testing`.`users` `u` 
  on((`u`.`id` = `f`.`refereeid`))) 
left join `fixturef_testing`.`competition` `c` 
  on((`c`.`id` = `f`.`competitionid`))) 
where (`f`.`active` = 1)

Светильники имеют hometeamid и awayteamid Команды имеют идентификатор и имя

Я пробовал подзапрос, но онвозвращает несколько результатов.

Любая помощь / совет приветствуется.

Команды Матчи

1 Ответ

0 голосов
/ 14 декабря 2018

Вам нужно присоединиться к командам дважды, один раз за домашнюю команду, один раз за гостями.

Подумайте об этом так: для каждого внешнего ключа, который вы имеете к той же таблице, вам нужно еще одно соединение.

Хотя я не уверен, почему у вас есть несколько соединений для fixturef_testing, одно для пользователя и одно для завершения ...

Кроме того, я не фанат ставить все в спинуклещи.Я бы предпочел использовать это только тогда, когда у меня есть зарезервированное ключевое слово, чтобы сделать его более читабельным.

SELECT cast(f.`datetime` as date) AS `date`
     , cast(f.`datetime` as time) AS `time`
     , HT.Name hometeam
     , AT.Name awayteam
     , u.name AS referee
     , c.name AS competition
FROM fixturef_testing.fixtures f
--Are the next 2 joins really needed?--
LEFT JOIN  fixturef_testing.users u 
  on u.id = f.refereeid
LEFT JOIN  fixturef_testing.competition c 
  on c.id = f.competitionid
--Not sure what the above joins are for...
--Get the table Teams record for the home team
LEFT JOIN Teams HT  
 on HT.ID = f.hometeamID 
--Get the table Teams record for the away team
LEFT JOIN Teams AT
 on AT.ID = f.awayTeamID
WHERE f.active = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...