2016-07-07 31 views
0

我想自我加入表中的信息,以顯示一個層次結構(該表包含成員,其中包括兒童及其父母)。表名是'成員',四個重要列是id,full_name,father_id和mother_id。列father_id和mother_id中的id匹配'id'列中相應的id。作爲查詢的結果,我想有一個三列,列名稱'名稱','父'和'母親'的表格如何獲得tripple自我加入工作

我搜索谷歌,W3學校和堆棧溢出,最接近什麼我一直在尋找的是一個話題,我發現在這裏,所謂的「說明自聯接」是有下面的例子代碼:

select 
    c1.Name , c2.Name As Boss 
from 
    emp1 c1 
inner join emp2 c2 
    on c1.Boss_id = c2.Id 

我改變了查詢,如下所示(我甚至不敢包括第三列尚未:')):

select 
    c1.full_name as Name, c2.full_name as Father 
from 
    members1 c1 
inner join members2 c2 
    on c1.father_id = c2.id 

不幸的是,我收到一條錯誤消息如下:1146 - 表'ppstb.members1'不存在

我猜想它與我如何模擬有兩個表有關。我實驗過,接下來的事情就是:

select 
    c1.full_name , c2.full_name as Father 
from 
    members c1, members c2 
inner join members c2 
    on c1.father_id = c2.id 

但是,這也提供了一個錯誤:1066 - 不是唯一的表/別名:「C2」我錯過了哪一步?

+0

對於#1146錯誤:表名是區分大小寫的。你使用正確的大小寫嗎? – Arulkumar

+0

@Arulkumar根據他的查詢,他的表名是成員,但他在該查詢中使用其名稱爲members1,這是問題 –

回答

0

最後一個成員應該是c3分別不C2

select 
    c1.full_name , c3.full_name as Father 
from 
    members c1, members c2 
inner join members c3 
    on c1.father_id = c3.id 
+0

你不需要「成員c2」,如果你想要刪除它 –

0

事實上,我的代碼工作,使用左聯接。我不知道爲什麼內部連接不起作用,但這解決了我的問題:

SELECT 
    members.full_name, b.full_name AS Father, c.full_name AS Mother 
FROM 
    members 
LEFT JOIN 
    members b ON (members.father_id = b.id) 
LEFT JOIN 
    members c ON (members.mother_id = c.id)