2016-12-25 6 views
1

есть У меня есть эта таблица «клиент», которая является самоналожением. Таблица выглядит так:SQL Self-reference join query, не отображающий все записи

customer 
--------- 
id_cus name  sex  id_cus_family family_as 
001  A  M  002    son 
002  B  F  001    mother 
003  C  M  002    husband 
004  D  M  003    father 

id_cus_family предназначен для ссылки id_cus. Я попытался запросить показ всех записей с добавлением имени их фамилии в качестве нового столбца. Я использовал это:

SELECT 
    c1.* , c2.name AS family_name 
FROM 
    customer c1 
    inner join customer c2 on c2.id_cus = c1.id_cus_family 

Но результат не отобразил все записи из таблицы клиентов. Результат был следующим:

query result 
--------- 
id_cus name  sex  id_cus_family family_as family_name 
001  A  M  002    son   B 
002  B  F  001    mother  A 
002  B  F  001    mother  C 
003  C  M  003    husband  D 

Он должен был показать весь результат, не так ли? или что-то не так с моим кодом запроса? Я очень ценю помощь.

+3

Используйте 'влево join' –

+0

Вау, я никогда не думал об этом, спасибо! – hahaharies

ответ

0

Вы можете использовать Left outer join

SELECT 
    c1.* , c2.name AS family_name 
FROM 
    customer c1 
left outer join customer c2 
    on c2.id_cus = c1.id_cus_family 
2

Я изменил свой запрос так:

SELECT c1.*,c2.name as family_name 
FROM Customer as c1 
JOIN Customer as c2 ON c1.id_cus_family=c2.id_cus 

Результат будет выглядеть следующим образом:

id_cus name sex id_cus_family family_as family_name 
1  A  M 2    son  B 
2  B  F 1    mother A 
3  C  M 2    husband B 
4  D  M 3    father C