2013-10-08 83 views
1

我想用遞歸自我連接編寫查詢。我的表是如下的內容:遞歸自我的Mysql查詢JOIN

表1

EMP_ID  Name 
1   Manger1 
2   Manger2 
3   Manger3 
4   Employ1 
5   Employ2 

表2

Par_EMP_ID EMP_ID 
1    2 
2    3 
3    4 
3    5 

在這裏,在上面的表格中Manager1Manager2,...,Employe2是員工所在的公司Manager1是頭Manager2正在報告給Manager1Manager3正在報告給Manager2,本關係維持在table2其中Par_EMP_ID是報告二的EMP_ID和列EMP_ID是報告人的身份。現在我想如下結果:

Manager1  Manager2 Manager3 Employe1 
Manager1  Manager2 Manager3 Employe2 
+2

閱讀[mysql如何找到子行的總數相對於父](http://stackoverflow.com/questions/13737784/mysql-how-to-find-the-total-number-of-孩子行與尊重父母/ 13737946#13737946) –

+0

在這裏創建您的表:http://sqlfiddle.com/並打電話給我。 – Piszu

+0

並閱讀[MySQL:Tree-Hierarchical query](http://dba.stackexchange.com/questions/30021/mysql-tree-hierarchical-query) –

回答

1

UPDATE:

根據您的規格,這裏的解決方案:

SELECT e.names member, d.name child 
    FROM MEMBERS d INNER JOIN 
     (SELECT a.id, GROUP_CONCAT(c.name) NAMES 
      FROM MEMBERS a 
    INNER JOIN RELATIONSHIP b ON a.id = b.MEM_ID 
INNER JOIN MEMBERS c ON c.id = b.PAR_MEM_ID 
GROUP BY a.id) e ON e.id = d.id 

結果:

|    MEMBER |  CHILD | 
|--------------------|--------------| 
| Great Grand Father | Grand Father | 
|  Grand Father |  Father | 
|    Father |  Child1 | 
|    Father |  Child2 | 

注意:結果可能取決於您的樣本數據。我還更新了下面的SQLFiddle,所以你可能想檢查一下。

這是SQLFiddle

+0

很好的答案。如果我只想看看「Child2」和「Great Grand Father」之間是否存在關係鏈,該怎麼辦? (而不是所有的關係?) – Xeoncross