前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL练习笔记五:树节点

SQL练习笔记五:树节点

作者头像
用户6184845
发布2021-01-04 11:31:36
3650
发布2021-01-04 11:31:36
举报

每个节点都是以下三种类型中的一种:

  • Root: 如果节点是根节点。
  • Leaf: 如果节点是叶子节点。
  • Inner: 如果节点既不是根节点也不是叶子节点。

对于tree表,id是树节点的标识,p_id是其父节点的id。

代码语言:javascript
复制
CREATE TABLE tree(
  id int(4) not null,
  p_id int(4)
);

insert INTO tree (id) VALUES(1);
insert INTO tree VALUES(2,1);
insert INTO tree VALUES(3,1);
insert INTO tree VALUES(4,2);
insert INTO tree VALUES(5,2);
代码语言:javascript
复制
-- 根节点查询 --
SELECT
  id,
  @Type := 'Root' AS Type 
FROM
  tree 
WHERE
  p_id IS NULL;

-- 内部节点查询 --
SELECT
  id,
  @Type := 'Inner' AS Type 
FROM
  tree 
WHERE
  id IN ( SELECT DISTINCT p_id FROM tree WHERE p_id IS NOT NULL ) 
  AND p_id IN ( SELECT DISTINCT id FROM tree WHERE id IS NOT NULL );

-- 叶子节点查询 --
SELECT
  id,
  @Type := 'Leaf' AS Type
FROM
  tree
WHERE
  id not in(SELECT DISTINCT p_id FROM tree WHERE p_id is not null);
代码语言:javascript
复制
-- 解法:case条件分支判断解决
SELECT
  id,
  (
  CASE
      WHEN p_id IS NULL THEN 'Root' 
      WHEN id NOT IN ( SELECT DISTINCT p_id FROM tree WHERE p_id IS NOT NULL ) THEN  'Leaf'
      ELSE 'Inner' 
    END 
  ) AS Type 
FROM
  tree;

网优苦短,我用Python

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网优小兵玩Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档