重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用sqlserver递推查询,可以直接查询出来。
辛集ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
参考资料:
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语句还需要自己验证一下,上面的自己看着乱写的。
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;
SQL Server子查询,以及对SQL Server子查询概念的具体描述,SQL Server数据库的子查询主要是指将一条SQL Sever语句正确的嵌入到另一条SQL Sever数据库的语句中。数据库引擎将子查询做为虚表执行查询操作。
子查询可做为连接语句中的一个表,可做为选择语句中的一个值,也可以是SQL Sever查询子句,还可以是SQL Sever查询子句的字句,与数据操作语句混合在一起。
子查询的执行依赖于嵌套查询。查询树从最里层开始,一层一层向外执行。高层的嵌套查询可以访问低层嵌套查询的结果。
什么是相关子查询?
与经典子查询不同,相关子查询依赖于外部查询。外部查询和子查询是有联系的,尤其在子查询的WHERE语句中更是如此。相关子查询的工作方式是:在子查询中找到外部查询的参考时执行外部查询,此时将结果返回给子查询。然后在外部查询返回的结果集上执行SQL Server子查询操作。
相关子查询的执行性能
由于相关子查询中的子查询在外部查询返回的结果集上进行执行,其效率肯定下降。子查询的性能完全依赖于查询和有关的数据。但是,如果相关子查询的语句写得很有效率,则其执行性能能够胜过那些使用几个连接和临时表的程序。
可以按如下方法查看:
1、用指定用户登录pl/sql。
2、登录后,看左边的树。
3、找到tables,然后点击。其中红框部分即为表的界面。
4、找到views,然后点击。其中红框部分即为视图的界面。
如果树的层数固定就可以用语句查询,但效率比较低。例如你说的三层:
select id,v2.name+name from t1 inner join
(select id,v1.name+name as name from t1 inner join
(select id,name from t1 where parentid = 0) v1 on t1.parentid = v1.id) v2 on t1.parentid = v2.id
你这写法是正确的,至少递归的数据已达到.只是显示方式不一样.
加个记录字段,并按记录字段排序即可完成以下效果:
--修改如下:
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
测试数据效果图下:
希望能帮到你!