您的位置:首页 > 教育 > 锐评 > 浙江今天的新消息_微信app下载安装到手机上_吉林刷关键词排名优化软件_网站优化网

浙江今天的新消息_微信app下载安装到手机上_吉林刷关键词排名优化软件_网站优化网

2025/11/6 22:18:23 来源:https://blog.csdn.net/smilejingwei/article/details/144848755  浏览:    关键词:浙江今天的新消息_微信app下载安装到手机上_吉林刷关键词排名优化软件_网站优化网
浙江今天的新消息_微信app下载安装到手机上_吉林刷关键词排名优化软件_网站优化网

MSSQL 数据库某表具有多层级的自关联结构,第 2 个字段父节点 ID 是指向本表的第 1 个字段节点 ID 的外键,第 3 个字段是区域。

product_identifierparent_product_identifierZone
15E
26F
37G
48H
511R
612B
713C
814D
1115A

现在要找出上级层数大于等于 2 的那些节点的层级,以及最高层节点的区域,比如第 1 条记录的上级有 3 层,分别是 5-11-15,最高层是 15;第 2 条记录的上级有 2 层,分别是 6-12,最高层是 12。

product_identifierhierarchyZone
13A
22B
32C
42D
52A

SQL解法:

WITH dt AS (SELECTtemp.product_identifier,temp.parent_product_identifier,temp.Zone,1 AS hierarchy,parent_product_identifier AS current_parent FROM tempUNION ALLSELECTdt.product_identifier, dt.parent_product_identifier, temp.Zone, dt.hierarchy+1, temp.parent_product_identifier AS current_parentFROM dtINNER JOIN tempON temp.product_identifier = dt.current_parent
)
SELECT product_identifier,parent_product_identifier,hierarchy,Zone
FROM dt
WHERE hierarchy > 1 
AND hierarchy = (SELECT MAX(hierarchy) FROM dt dt2 WHERE dt2.product_identifier = dt.product_identifier) 
ORDER BY product_identifier;

只要找到各节点递归引用的所有层级,就可以方便地过滤出结果,但SQL没有直接可以用的函数,要用结构复杂的递归子查询+自关联join来实现,代码冗长难懂。

SPL提供了直接可用的函数,可以获得节点递归引用的所有层级。

 A
1=mssql.query("select product_identifier,parent_product_identifier,zone from temp order by product_identifier”)
2=A1.switch(parent_product_identifier, A1:product_identifier)
3=A2.derive(~.prior(parent_product_identifier):t, t.len():hierarchy, t.m(-1).zone:z)
4=A3.select(hierarchy>=2)
5=A4.new(product_identifier, hierarchy, z:zone)

A2:建立引用关系,将parent_product_identifier替换成外键指向的本表的记录。

A3:新增计算列,用prior函数计算出本节点递归引用的所有层级,这些层级的层数以及最后一个层级的区域。

A4:选出递归引用的所有层级的层数大于等于2的节点。

A5:生成目标结果集。

SPL以开源免费,欢迎前往乾学院了解更多!

源码地址

免费下载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com