MySQL 确定哪些是叶节点、分子节点、根节点
备注:测试数据库版本为MySQL 8.0
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
一.需求
确定给定行属于哪些类型的节点: 叶节点、分支节点及根节点。
对于这个例子,叶节点表示该员工不是经理;分支节点上的员工即是经理,又有经理根节点是没有经理的员工。
通过返回1(TRUE)或0(FALSE),
二.解决方案
请注意,EMP表是树状层次模型,而不是递归层次模型,根节点的mgr值为null。
如果emp是递归层次模型的话,根节点应有自引用(即员工KING的mgr值将是KING的empno)。
实际上,自引用并不直观,故这里将根节点的mgr设为null值。
对于递归层次模型中使用 connect by(Oracle)或with的情况,请务必当心:SQL可能会死循环,如果一定要采用递归层次,代码中必须考虑避免这样的循环。
select e.ename,(select sign(count(*)) from emp dwhere 0 =(select count(*) from emp fwhere f.mgr = e.empno)) as is_leaf,(select sign(count(*)) from emp dwhere d.mgr = e.empnoand e.mgr is not null) as is_branch,(select sign(count(*)) from emp dwhere d.empno = e.empnoand d.mgr is null) as is_rootfrom emp eorder by 4 desc,3 desc;
测试记录:
mysql> select e.ename,-> (select sign(count(*)) from emp d-> where 0 =-> (select count(*) from emp f-> where f.mgr = e.empno)) as is_leaf,-> (select sign(count(*)) from emp d-> where d.mgr = e.empno-> and e.mgr is not null) as is_branch,-> (select sign(count(*)) from emp d-> where d.empno = e.empno-> and d.mgr is null) as is_root-> from emp e-> order by 4 desc,3 desc;
+--------+---------+-----------+---------+
| ename | is_leaf | is_branch | is_root |
+--------+---------+-----------+---------+
| KING | 0 | 0 | 1 |
| JONES | 0 | 1 | 0 |
| BLAKE | 0 | 1 | 0 |
| CLARK | 0 | 1 | 0 |
| SCOTT | 0 | 1 | 0 |
| FORD | 0 | 1 | 0 |
| SMITH | 1 | 0 | 0 |
| ALLEN | 1 | 0 | 0 |
| WARD | 1 | 0 | 0 |
| MARTIN | 1 | 0 | 0 |
| TURNER | 1 | 0 | 0 |
| ADAMS | 1 | 0 | 0 |
| JAMES | 1 | 0 | 0 |
| MILLER | 1 | 0 | 0 |
+--------+---------+-----------+---------+
14 rows in set (0.00 sec)
MySQL 确定哪些是叶节点、分子节点、根节点相关推荐
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( 创建 XmlNode 节点 | 管理 XmlNode 节点并将根节点转为 Xml 信息 | 完整代码示例 )
文章目录 一.创建 XmlNode 节点 二.管理 XmlNode 节点并将根节点转为 Xml 信息 三.完整代码示例 1.自定义 Xml 生成器 MyBuilderSupport 2.Xml 节点封 ...
- Xml解析-根节点是集合根节点
Xml解析-根节点是集合根节点,解析集合如下 <?xml version="1.0" encoding="utf-8" ?> <CityLis ...
- mysql 获取根节点_mysql递归查询根节点
同时查询2张表, 查询学生所在的班级 mysql> select xing_ming,ban_ming from xue_sheng,ban_ji; 别名的使用 mysql> select ...
- SQL-将具有上下级关系的表,转换成树形图,并标识各节点的类型(根节点、分支节点、叶子节点)
需求:将具有上下级关系的表,转换为树形图,并标识各节点的类型(根节点.分支节点.叶子节点) 分析与解答: 根据伪列level和connect_by_isleaf的值进行判断即可 select leve ...
- java根节点到叶子节点_二叉树根节点到叶子节点的所有路径和
我觉得这个题目和剑指offer中的一道题目非常相似.先说这个题: 解题思路:从根结点开始,当每访问到一个结点,我们把该结点添加到路径上,并"累加" 该结点的值,这里"累加 ...
- avl删除根节点图解_图解 6 种树,你心中有数吗。。。
数据结构这门课程是计算机相关专业的基础课,数据结构指的是数据在计算机中的存储.组织方式. 我们在学习数据结构时候,会遇到各种各样的基础数据结构,比如堆栈.队列.数组.链表.树...这些基本的数据结构类 ...
- HDU - 1890 Robotic Sort(Splay-区间翻转+删除根节点)
题目链接:点击查看 题目大意:给出一个序列,初始时是乱序的,要求根据规则排序,规则是,遍历每一个点 i ,使得区间 [ i , a[ i ] ] 内的数翻转,a[ i ] 表示的是数列中第 i 大的数 ...
- 数据结构-树:根节点、子节点、叶子节点是什么?
前言:这个属于数据结构:树. 下面给个例子图解释(根节点.子节点.叶子节点). 上图数字 1.3.7是叶子节点:(因为他们下面没有分叉出子节点,所以称为:叶子节点)[度为0] 数字2.8是子节点: ( ...
- POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)
Description: A number of schools are connected to a computer network. Agreements have been developed ...
- cms 移动根节点到根节点中的子节点,根节点消失解决办法
cms 移动根节点到根节点中的子节点,根节点消失解决办法 cms使用对应有个NetCMS数据库,找到其中NT_News_Class表,这个表就是保存栏目名称的表 select * from dbo.N ...
最新文章
- 构建 RESTful Web 服务
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)(二)
- 解题:USACO14OPEN Fair Photography
- Java GUI 基础知识
- Nokia 920全部CODE
- 软/硬件负载均衡产品 你知多少?
- linux 查看指定目录的所有文件大小
- 20160205 - Windows 10 家庭版没有组策略
- ELAS_ROS算法在KITTI数据集上生成稠密点云
- 查看电脑CPU是否支持虚拟化
- pageHelper.startPage(m,n)的用法
- the7主题footer.php,【Drupal7主题】Repro 清爽杂志门户Drupal 主题
- Unity Shader Dither
- kail linux配置无线网络,Kali Linux 无线渗透测试入门指南 第一章 配置无线环境
- Spring retry重试框架
- spm + host
- 名额有限| 和喜马拉雅、网易严选、大搜车...学运营,是超级用户运营!
- 使用TIM捕获测量PWM频率和占空比
- excel表格行列显示十字定位_突出显示活动单元格所在行列的设置方法
- 华云数据出席2021信创发展论坛:喜获信创双项殊荣 发布业内首个《信创云基座白皮书》