sql 树形 子节点获取最顶级的节点

简介: create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001'...
create table tb(id varchar(3) , pid varchar(3) , name varchar(10))  
insert into tb values('001' , null  , '广东省')  
insert into tb values('002' , '001' , '广州市')  
insert into tb values('003' , '001' , '深圳市')  
insert into tb values('004' , '002' , '天河区')  
insert into tb values('005' , '003' , '罗湖区')  
insert into tb values('006' , '003' , '福田区')  
insert into tb values('007' , '003' , '宝安区')  
insert into tb values('008' , '007' , '西乡镇')  
insert into tb values('009' , '007' , '龙华镇')  
insert into tb values('010' , '007' , '松岗镇')  
go  

--查询指定节点最上级父节点的函数  
create function f_pid(@id varchar(3)) returns @t_level table(id varchar(3))  
as  
begin  
  insert into @t_level select @id  
  select @id = pid from tb where id = @id and pid is not null  
  while @@ROWCOUNT > 0  
  begin  
    delete from @t_level  
    insert into @t_level select @id select @id = pid from tb where id = @id and pid is not null  
  end  
  return  
end  
go  

--调用函数查询005(罗湖区)的最上级父节点  
select a.* from tb a , f_pid('005') b where a.id = b.id   
/*  
id   pid  name         
---- ---- ----------   
001  NULL 广东省  

(所影响的行数为 1 行)  
*/  

--调用函数查询002(广州市)的最上级父节点  
select a.* from tb a , f_pid('002') b where a.id = b.id   
/*  
id   pid  name         
---- ---- ----------   
001  NULL 广东省  

(所影响的行数为 1 行)  
*/  

--调用函数查询001(广东省)的最上级父节点  
select a.* from tb a , f_pid('001') b where a.id = b.id   
/*  
id   pid  name         
---- ---- ----------   
001  NULL 广东省  

(所影响的行数为 1 行)  


drop table tb  
drop function f_pid  
目录
相关文章
|
7月前
leetcode-SQL-608. 树节点
leetcode-SQL-608. 树节点
39 0
|
2月前
|
SQL
sql树型应用总结
sql树型应用总结
30 2
|
4月前
|
SQL 存储
访问者模式问题之在处理 SQL 语句时, IdExpression 和 LiteralExpression 节点如何忽略
访问者模式问题之在处理 SQL 语句时, IdExpression 和 LiteralExpression 节点如何忽略
|
4月前
|
SQL
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
访问者模式问题之构造一个包含 select、from 和 where 子句的 SQL 节点树,如何解决
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在使用ODPSSQL节点进行SQL任务开发时,如何执行大量的SQL语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
90 4
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之赋值节点能否支持CDH sql
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
24 0
|
6月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之如何创建Holo SQL节点
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
36 0
|
7月前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
7月前
|
SQL 机器学习/深度学习 算法
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
|
7月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_36 树节点
「SQL面试题库」 No_36 树节点