高分求解:这样的SQL语句怎么写 (急用,在线等待)

cqzhangq 2002-09-25 02:57:55
有一个表A,如下:
id text parent_id(上一级节点) level(第几层)
1 节点 1 1
2 子节点 1 2
3 子节点 1 2
4 子节点 2 3
5 子节点 3 3
如何用一条SQL找到某个节点的所有节点的ID
请高手指点,谢谢
...全文
55 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqllyh 2002-09-27
  • 打赏
  • 举报
回复
假设最多4层,父节点aa

select distinct id, pid into #temp1 from a where pid ='aa' and level=2
select distinct id, pid into #temp2 from a where pid in (select id from #temp1) and level=3
select distinct id, pid into #temp3 from a where pid in (select id from #temp2) and level=3
select id from #temp1
union
select id from #temp2
union
select id from #temp3

其实一句就可以写出来,但我这样写的话,更易看明白。不定的话用循环再加动态SQL。

newly_ignorant 2002-09-27
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/954/954821.xml?temp=.4358026
撒加的天使 2002-09-27
  • 打赏
  • 举报
回复
你是不是想用 TreeView 并且把这个树的结构存到数据库中然后处理?!
chanet 2002-09-27
  • 打赏
  • 举报
回复
详细点?!
brook_huang 2002-09-26
  • 打赏
  • 举报
回复
你可以用存储过程,我把思路说一下,供大家参考,希望大家提出意见:
1、根据给出的节点找出它属于哪一层,赋值给一个变量;
2、建一个临时表,包括字段:ID;
3、根据得到变量做一个循环,找出需要的ID值插入到临时表;
不知道我的思路是否正确
cqzhangq 2002-09-26
  • 打赏
  • 举报
回复
没有人会写吗,存储过程也行啊
ddvboy 2002-09-26
  • 打赏
  • 举报
回复
能说明你是干什么用吗。?
cqzhangq 2002-09-25
  • 打赏
  • 举报
回复
不好意思,说漏了:要查的是所有父节点,level的值不限(>3)
brook_huang 2002-09-25
  • 打赏
  • 举报
回复
level如果大于3层呢,上面的sql语句好像就行不通。
奇遇 2002-09-25
  • 打赏
  • 举报
回复
将根节点的parent_id设为0
或用下面语句可以使取根节点时不取自己

SELECT text
FROM A
WHERE ((parent_id =@id) or
parent_id in (select id from leaf where parent_id =@id)) and id<>@id
奇遇 2002-09-25
  • 打赏
  • 举报
回复
@id 为要查的节点
SELECT texts
FROM leaf
WHERE (parent_id =@id) or
parent_id in (select id from leaf where parent_id =@id)

结果集为@id的所有子节点
mytd 2002-09-25
  • 打赏
  • 举报
回复
用一条SQL行不通

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧