Mysql嵌套查询从单个表中获取子实体

时间:2015-08-05 03:08:46

标签: mysql sql database

我有一个名为tbl_company的mysql表,它看起来像这个

|------------|--------------|-------------------|
| Company_id | Company_name | Company_Parent_id |
|------------|--------------|-------------------|
|            |              |                   |
|            |              |                   |
|------------|--------------|-------------------|

这里company_parent_id只不过是某公司的母公司名称的company_id。

我想要做的是编写一个嵌套查询,它给出了如下数据

|------|-----------|-----------|-----------|-----------|
| Root | 1st Level | 2nd Level | 3rd Level | 4th Level |
|------|-----------|-----------|-----------|-----------|
|      |           |           |           |           |
|      |           |           |           |           |
|------|-----------|-----------|-----------|-----------|

我将提供root company_id并将根据该订单进行订购,以便结果应该像

|------|-----------|-----------|-----------|-----------|
| Root | 1st Level | 2nd Level | 3rd Level | 4th Level |
|------|-----------|-----------|-----------|-----------|
|  abc |    def    |           |           |           |
|  abc |    def    |    efg    |           |           |
|  abc |    def    |    efg    |    hij    |           |
|  abc |    def    |    efg    |    hij    |  lmn      |
|------|-----------|-----------|-----------|-----------|

我该如何处理?任何帮助都会很棒!

修改

我自己尝试了一个查询,它没有返回所有结果

SELECT l1.Company_name AS lev1, l2.Company_name as lev2, l3.Company_name as lev3, l4.Company_name as lev4
FROM tbl_company AS l1
LEFT JOIN tbl_company AS l2 ON l2.Company_Parent_id = l1.Company_id
LEFT JOIN tbl_company AS l3 ON l3.Company_Parent_id = l2.Company_id
LEFT JOIN tbl_company AS l4 ON l4.Company_Parent_id = l3.Company_id
WHERE l1.Company_Parent_id = 0 and l1.Company_id != 0 
ORDER BY l1.Company_name ASC;

有人可以帮助我让这个SQL工作吗?

0 个答案:

没有答案