2016-12-12 7 views
0
SELECT teams.teamname AS Home, 
     teams.teamname AS Away 
FROM game 
     LEFT JOIN teams 
       ON game.awayteam = teams.teamid 
     LEFT JOIN teams AS T 
       ON game.hometeam = T.teamid 

Моих таблиц являются следующимиНевозможно присоединиться два ключа к одному первичному ключу с левым присоединиться

Game          
-GameId(Pk,int), 
-HomeTeamId (fk,int), 
-AwayTeamId(fk,int)      

Teams 
-TeamId(Pk,int), 
-TeamName(Varchar) 

Я пытаюсь посмотреть как хозяин и на выезд имя команды в query.When я присоединяюсь в таблицах мои ожидаемые результаты - имя домашней команды и имя команды в гостях, однако в обеих таблицах указано только имя домашней команды.

Home Team|Spikes 

Away Team|Spikes 

, когда должно быть

Home Team|Spikes 

Away Team|Raptors 

ответ

1

Вы должны дать как присоединяется псевдоним. Вы выбираете результат первого объединения дважды.

например.

SELECT 
    GameId, 
    home.TeamName AS Home, 
    away.TeamName AS Away 
FROM Game 
    LEFT JOIN Teams AS away ON AwayTeamId = away.TeamId 
    LEFT JOIN Teams AS home ON HomeTeamId = home.TeamId; 
+0

Большое вам спасибо! – WizardMan

+0

То, что вы называете «псевдоним» (глагол), на самом деле является переменной диапазона (существительное). Термин «псевдоним» вводит в заблуждение по той самой причине, которую вы демонстрируете здесь: «Вам нужно дать оба объединения псевдонимам» - переменная диапазона представляет ** строку **, а не соединение (или таблицу). – onedaywhen

0

Если нажать переименование столбцов в табличных выражения в стыках можно использовать NATURAL JOIN и избегать использования переменного диапазона полностью. Кроме того, я не уверен, что вам действительно нужны внешние соединения:

SELECT Home, Away 
    FROM game 
     NATURAL JOIN 
     (SELECT teamid AS hometeam 
       teamname AS home 
     FROM teams) Home 
     NATURAL JOIN 
     (SELECT teamid AS awayteam 
       teamname AS Away 
     FROM teams) away;