首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多极菜单的sql语句.数据库设计

2012-05-04 
求一个多极菜单的sql语句.数据库设计就是查询出一个父节点下面的所有子节点,和子节点下面的所有子节点。[解

求一个多极菜单的sql语句.数据库设计
就是查询出一个父节点下面的所有子节点,和子节点下面的所有子节点。

[解决办法]
BOM节点处理,写个2005的,其他方法可以查询的到的。

SQL code
--表tb 字段 id parentid;with cte as(    select id,parentid from tb where id = 2  --查询2下所有节点信息    union all    select a.id,a.parentid    from tb a join cte b on a.parentid = b.id    where a.id is not null)select * from cte
[解决办法]
SQL code
--测试数据CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))INSERT tb SELECT '001',NULL ,'山东省'UNION ALL SELECT '002','001','烟台市'UNION ALL SELECT '004','002','招远市'UNION ALL SELECT '003','001','青岛市'UNION ALL SELECT '005',NULL ,'四会市'UNION ALL SELECT '006','005','清远市'UNION ALL SELECT '007','006','小分市'GO --查询指定节点及其所有子节点的函数CREATE FUNCTION f_Cid(@ID char(3))RETURNS @t_Level TABLE(ID char(3),Level int)ASBEGIN    DECLARE @Level int    SET @Level=1    INSERT @t_Level SELECT @ID,@Level    WHILE @@ROWCOUNT>0    BEGIN        SET @Level=@Level+1        INSERT @t_Level SELECT a.ID,@Level        FROM tb a,@t_Level b        WHERE a.PID=b.ID            AND b.Level=@Level-1    END    RETURNENDGO --调用函数查询002及其所有子节点SELECT a.*FROM tb a,f_Cid('002') bWHERE a.ID=b.ID/*--结果ID   PID  Name       ------ ------- ---------- 002  001  烟台市004  002  招远市--*/
[解决办法]
SQL code
select c.* from Comment c where c.articleId = 'bd3f3e72359c96e201359e85f0940001' union select a.* from Comment a inner loop join Comment b on a.commentId = b.id and b.articleId = 'bd3f3e72359c96e201359e85f0940001' 

热点排行