SQL 确认叶子节点、分支节点和根节点,你想确定给定的一行数据是哪种类型的节点:叶子节点、分支节点还是根节点。对于本实例而言,叶子节点代表不是管理者的员工。分支节点表示管理者的员工,同时他也拥有自己的上级管理者。根节点表示没有上级管理者的员工。
SQL 确认叶子节点、分支节点和根节点 问题描述
你想确定给定的一行数据是哪种类型的节点:叶子节点、分支节点还是根节点。对于本实例而言,叶子节点代表不是管理者的员工。分支节点表示管理者的员工,同时他也拥有自己的上级管理者。根节点表示没有上级管理者的员工。你希望通过返回 1(TRUE)或 0(FALSE)来反映每一行在层次关系中的状态。你希望返回如下所示的结果集。
SQL 确认叶子节点、分支节点和根节点 解决方案
EMP 表是树形结构,而不是递归层次结构(recursive hierarchy),因为根节点的 MGR 值是 Null。认识到这一点很重要。如果 EMP 表是递归层次结构,那么根节点将会指向自身(即员工 KING的 MGR 值将等于他的 EMPNO)。我认为这是违反常理的,因而指定根节点的 MGR 值为 Null。对于 Oracle 的 CONNECT BY 子句和 DB2/SQL Server 的 WITH 子句而言,树形结构处理起来更容易,甚至可能比递归层次结构的处理效率更高。如果必须要处理递归层次结构,并且要使用 CONNECT BY 或 WITH 子句,那么就要小心了:我们可能会掉进死循环里。为防止陷入递归层次结构设置的陷阱,需要编写额外的代码小心地避开它。
DB2、PostgreSQL、MySQL 和 SQL Server
使用 3 个标量子查询,针对每一种节点类型分别计算出正确的“布尔”值(1 或 0)。
Oracle
对于 Oracle Dat