一棵树,用SQL找出所有的叶子结点。
select b.id, b.name as Child, b.company_id
from cmf_school_area a
join cmf_school_area b on a.id = b.parent_id
where
a.delete_time is null AND
b.delete_time is null AND
b.company_id = 29 and
b.id not in (
select c.parent_id
from cmf_school_area c
where c.delete_time is NULL
)
我再截个图:
image.png
查询结果:
image.png
这段SQL的思想比较巧妙。
关于叶子结点的问题,以前遇到的想法都是层层逼近。在算法中,不管深度优先搜索,广度优先搜索,还是递归,在我看来实质都差不多。
但是这段sql,很有气势。叶子结点无非三层,叶子一层,叶子父结点一层,叶子下面的null一层。然后,它就直接对着叶子结点搜了。
很直白,很大胆的一种想法。竟然还能搜出结果 。