具有递归自连接的Mysql查询

标签 mysql

我正在尝试使用递归自联接编写查询。我的表格如下:

表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是部门主管。Manager2Manager1汇报,Manager3Manager2汇报,这种关系在 table2 中维护,其中 Par_EMP_ID 是 reportii 的 EMP_IDEMP_ID 是 reporter 的 id。现在我想要如下结果:

Manager1      Manager2   Manager3  Employe1
Manager1      Manager2   Manager3  Employe2

最佳答案

更新:

根据您的规范,这是解决方案:

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 .

关于具有递归自连接的Mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19243690/

相关文章:

python - MySQL不存储 float

PHP/mySQL 下拉框问题

php - 使用 PHP 对 MySQL 进行排序

MySQL SELECT,存储在变量中

mysql - 是否可以限制 WHERE 列 IN(...) 语句中每个值的行数?

python - 为 MySQL CREATE TABLE 生成 SQLAlchemy KEY 子句

php - 在一个网页中生成多个学生报告表

php - 如何在 Laravel 5 中获取 max()

mysql - 当 View 中的数据发生变化时触发查询

php - while 和 between 之间有什么区别,在我的情况下什么是更好的选择?