Sql HierarchyId如何获取最后的后代?
发布时间:2020-12-12 07:07:23 所属栏目:MsSql教程 来源:网络整理
导读:使用t-sql hierarchy Id如何获得所有没有子节点的行(这是最后的后代)? 说我的表结构如下: Id,Name,HierarchyId 并有这些行: 1,Craig,/2,Steve,/1/3,John,/1/1/4,Sam,/2/5,Matt,/2/1/6,Chris,/2/1/1/ 什么查询会给我约翰和克里斯? 解决方法 也许有更好的方
使用t-sql
hierarchy Id如何获得所有没有子节点的行(这是最后的后代)?
说我的表结构如下: Id,Name,HierarchyId 并有这些行: 1,Craig,/ 2,Steve,/1/ 3,John,/1/1/ 4,Sam,/2/ 5,Matt,/2/1/ 6,Chris,/2/1/1/ 什么查询会给我约翰和克里斯? 解决方法也许有更好的方法,但这种接缝可以完成这项工作.declare @T table ( ID int,Name varchar(10),HID HierarchyID ) insert into @T values (1,'Craig','/'),(2,'Steve','/1/'),(3,'John','/1/1/'),(4,'Sam','/2/'),(5,'Matt','/2/1/'),(6,'Chris','/2/1/1/') select * from @T where HID.GetDescendant(null,null) not in (select HID from @T) 结果: ID Name HID ----------- ---------- --------------------- 3 John 0x5AC0 6 Chris 0x6AD6 更新2012-05-22 如果节点编号不是完整的序列,则上述查询将失败.这是另一个应该处理的版本. declare @T table ( ID int,'/2/1/2/') -- HID for this row is changed compared to above query select * from @T where HID not in (select HID.GetAncestor(1) from @T where HID.GetAncestor(1) is not null) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |