mysql 如何根据父级字段得到所有子级

来源:互联网 发布:查重率软件 编辑:程序博客网 时间:2024/06/05 03:34

给出表格,表命名为t_boy

id  son(儿子)  father(父亲)



1     f1           f2
2     f2           f3
3     f3           f4
4     f4           f5
5     f5           f6


现给出f4,找出他所有后代?


首先最简单的方法是,通过连接进行查询。如下:

SELECT t1.*, ID.level
FROM t_boy t1, (
        SELECT A.name AS A, B.name AS B, C.name AS C, D.name AS D, E.name AS E, F.name AS F,
            CASE
                WHEN ISNULL(F.name) THEN 5
                WHEN ISNULL(E.name) THEN 4
                WHEN ISNULL(D.name) THEN 3
                WHEN ISNULL(C.name) THEN 2
                WHEN ISNULL(B.name) THEN 1
                ELSE 0
            END AS LEVEL
        FROM t_boy A
            LEFT JOIN t_boy B ON B.father = A.name
            LEFT JOIN t_boy C ON C.father = B.name
            LEFT JOIN t_boy D ON D.father = C.name
            LEFT JOIN t_boy E ON E.father = D.name
            LEFT JOIN t_boy F ON F.father = E.name
        WHERE A.name = 'f6'
    ) ID
WHERE t1.name IN(ID.B, ID.C, ID.D, ID.E, ID.F);



2.通过递归方式,你准备好了吗?

原创粉丝点击