2016-02-12 3 views
1

Я знаю, что это было задано раньше, и я пробовал методы, которые я видел здесь. Но это просто не работает.SQL Left Join on Self

У меня есть таблица «Люди», которая выглядит как это

PersonID, PersonName, PersonYOB, PersonCOB, FatherID

1 Fred Astaire 1963 USA 2 
2 Bruce Astaire 1933 USA NULL 
3 Adele Astaire 1961 FR  2 
4 Gene Kelly  1965 IT  NULL 
5 Lucy Astaire 1935 USA NULL 

То, что я хотел бы сделать, это выбрать, где приходит имя Отца от персонального идентификатора отца. У меня также есть Мать, но я удалил это для простоты. После того, как я получаю Отца работать я добавлю маму обратно.

Мой текущий ВЫБРАТЬ выглядит следующим образом

SELECT p.*, f.PersonName AS FatherName FROM People 
LEFT OUTER JOIN People f ON 
p.PersonID = f.FatherID 

всех моих людей появляются, но всегда Отчество NULL.

Фред Астэр должен показать отца ID 2 и f.PersonName как Брюс Астер. То же самое можно сказать о Адель Астере (его сестра).

Что мне не хватает?

+0

вы можете использовать 'inner join' для этой цели ... – Abbas

ответ

0

Здесь вы идете с inner join, потому что вы пытаетесь соединить таблицу с собой ....

SELECT p.*, f.PersonName AS 'FatherName' FROM People p //here is the p you forgot 
    INNER JOIN People f ON 
    p.PersonID = f.FatherID 
0

Ваше условие соединения в неверен. Измените, как показано ниже.

SELECT p.*, f.PersonName AS FatherName FROM People p 
LEFT OUTER JOIN People f ON 
p.FatherID= f.PersonID 
+0

Большое вам спасибо! Это была просто синтаксическая коррекция, в которой я нуждался. –