十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
sqlserver查询树形结构的所有子节点
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了姑苏免费建站欢迎大家使用!
用标准sql的with实现递归查询(sql2005以上肯定支持,sql2000不清楚是否支持):
with subqry(id,name,pid) as (
select id,name,pid from test1 where id = 5
union all
select test1.id,test1.name,test1.pid from test1,subqry
where test1.pid = subqry.id
)
select * from subqry;
使用sqlserver递推查询,可以直接查询出来。
参考资料:
WITH lmenu(nav_id,nav_name,nav_parentid,level) as
(
SELECT nav_id,nav_name,nav_parentid,0 level FROM nav nav_parentid=0
UNION ALL
SELECT A.nav_id, A.nav_name,a.nav_parentid, b.level+1 FROM gs_nav A,lmenu b where a.nav_parentid= b.nav_id and nav_id = 10
)
SELECT * from lmenu
具体SQL语句还需要自己验证一下,上面的自己看着乱写的。
你这写法是正确的,至少递归的数据已达到.只是显示方式不一样.
加个记录字段,并按记录字段排序即可完成以下效果:
--修改如下:
WITH rec(warecode,waresupercode,waerName,sort)
as
(
select warecode,waresupercode,waerName,warecode from DIC_WARE dw where dw.waresupercode IS NULL
UNION all
SELECT warecode,waresupercode,waerName,sort+'| '+warecode
from DIC_WARE a ,rec b on a.waresupercode=b.warecode
)
SELECT warecode,waresupercode,waerName
FROM rec order by sort
GO
测试数据效果图下:
希望能帮到你!