mysql 如何根据父级字段得到所有子级
2017-06-09 09:32
211 查看
给出表格,表命名为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.通过递归方式,你准备好了吗?
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.通过递归方式,你准备好了吗?
相关文章推荐
- Mysql 根据id查所有父级或子级
- sql如何根据父级Id得到所有下级的记录
- Mysql 根据id查所有父级或子级
- mysql 根据子级id查询其所有的父级的
- mysql group by分组,根据一个字段分组 ,又想得到另一个字段的最大或者最小。如何解决。
- 如何得到数据库中所有表名 表字段及字段中文描述
- sql 递归函数,根据父级ID获取所有子级(含自己)
- 如何得到一个数据表的所有数字型字段???
- 如何得到数据库中所有表字段及字段中文描述
- mysql根据字段查询数据库中的存在该字段的所有数据表
- 如何得到数据库中所有表字段及字段中文描述
- 如何得到Asterisk中MYSQL里存放的所有用户的分机号
- 如何得到数据库中所有表名 表字段及字段中文描述
- 如何得到数据库中所有表字段及字段中文描述
- mysql中根据一个字段相同记录写递增序号,如序号结果,如何实现?
- (转)MySql 获取所有级联父级或所有级联子级
- mysql 中如何取得汉字字段的各汉字首字母, 并根据首字母进行查询
- 根据表名得到除主键外的所有字段用来Update
- 根据子级ID获取其所有父级
- 如何得到数据库中所有表字段及字段中文描述