2021-04-29

这篇博客探讨了如何使用SQL查询语句来确定树形结构中节点的类型,包括根节点、内部节点和叶子节点。通过示例数据和查询结果,展示了如何依据节点的父节点信息来分类各个节点,并按编号排序。SQL查询利用了ISNULL和IN子查询来区分不同类型的节点。
摘要由CSDN通过智能技术生成

节点树

需求:写一个查询语句,输出所有节点的编号和节点的类型,并将结果按照节点编号排序。

表 tree,id 是树节点的编号, p_id 是它父节点的 id 。

树中每个节点属于以下三种类型之一:

​ 叶子:如果这个节点没有任何孩子节点。

​ 根:如果这个节点是整棵树的根,即没有父节点。

​ 内部节点:如果这个节点既不是叶子节点也不是根节点。

idp_id
1null
21
31
42
52

展示效果:

idType
1Root
2Inner
3Leaf
4Leaf
5Leaf

解释:

节点 1 是根节点,因为它的父节点是 NULL ,同时它有孩子节点 2 和 3 。

节点 2 是内部节点,因为它有父节点 1 ,也有孩子节点 4 和 5 。

节点 3, 4 和 5 都是叶子节点,因为它们都有父节点同时没有孩子节点。

Create table If Not Exists 30_tree (id int, p_id int);
Truncate table 30_tree;
insert into 30_tree (id, p_id) values (1, null);
insert into 30_tree (id, p_id) values (2, 1);
insert into 30_tree (id, p_id) values (3, 1);
insert into 30_tree (id, p_id) values (4, 2);
insert into 30_tree (id, p_id) values (5, 2);

最终sql:

-- 连续判断,找到其规律
SELECT
    t1.id,
    IF(ISNULL(t1.p_id),'Root', IF(t1.id IN (SELECT p_id FROM 30_tree), 'Inner','Leaf')) Type
FROM
    30_tree t1
ORDER BY t1.id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值