1樓:
建議使用遞迴,
oracl語法示例如下、
create table tbl_test
(id number, --主鍵
name varchar2(100 byte),
pid number default 0 --------父節點主鍵
);插入測試資料:
insert into tbl_test(id,name,pid) values('1','10','0');
insert into tbl_test(id,name,pid) values('2','11','1');
insert into tbl_test(id,name,pid) values('3','20','0');
insert into tbl_test(id,name,pid) values('4','12','1');
insert into tbl_test(id,name,pid) values('5','121','2');
從root往樹末梢遞迴
select * from tbl_test
start with id=1
connect by prior id = pid
從末梢往樹root遞迴
select * from tbl_test
start with id=5
connect by prior pid = id
sql server 2005語法示例如下、
create table tbl_test
(id int,
name varchar(100),
pid int default 0
);插入測試資料:
insert into tbl_test(id,name,pid) values('1','10','0');
insert into tbl_test(id,name,pid) values('2','11','1');
insert into tbl_test(id,name,pid) values('3','20','0');
insert into tbl_test(id,name,pid) values('4','12','1');
insert into tbl_test(id,name,pid) values('5','121','2');
select * from tbl_test
-- 從root往樹末梢遞迴
with cte as
(select *,0 as tlevel from tbl_test where id=1
union all
select t1.*,t2.tlevel+1 from tbl_test t1 inner join cte t2 on t1.pid=t2.id)
select * from cte
-- 從末梢往樹root遞迴
with cte as
(select *,0 as tlevel from tbl_test where id=5
union all
select t1.*,t2.tlevel+1 from tbl_test t1 inner join cte t2 on t1.id=t2.pid)
select * from cte
2樓:匿名使用者
--例如有表table,其結構及記錄如下:
id pid name
1 0 a
2 1 b
3 2 c
4 1 d
5 0 e
6 5 f
……--在sql中定義一個函式: [get_child]create function [get_child](@id varchar(14)
)returns @t_level
table(id varchar(14),level int)
with encryption --加密儲存過程asbegin
declare @level int
set @level = 1
insert @t_level
select @id
,@level
while @@rowcount > 0
begin
set @level = @level + 1insert @t_level
select a.id
,@level
from table a
,@t_level b
where a.pid = b.id
and b.level = @level - 1endreturn
--呼叫該函式得到結果的sql語句:
select a.*
from tb a, get_child('002') bwhere a.id = b.id
看看這樣是否可以通過一個子節點把它的所有父節點列出來?
3樓:匿名使用者
你的表結構是什麼樣子的,是包含 子節點 和父節點兩個欄位嗎?
一個組織結構的頂層節點,怎麼查詢這個節點下的所有使用者,能用一個sql查詢出來麼
4樓:
如果子節點只是存放了父節點一級的id的話,還真沒有什麼好辦法。
我們以前做的都是存兩個欄位的,一個存整個的層級關係,一個是存上級節點,這樣查詢起來效率高,就是維護成本高一些。而且組織結構這樣的東西一般都會用ldap這種樹形結構的「資料庫」儲存。
5樓:
子節點難道沒有父節點的id嗎 有的話根據父節點id就行啊
求大神寫個從父子節點查出目錄的sql
6樓:
您是要在查詢結果中顯示出樹形結構。
這非常難,我曾經作過bom樹形顯示,但非常複雜,需要根據層次數計算向右沿伸的製表符長度,節點部位用丁形制表符。最好不要用這種方式吧。
現在前臺程式語言都有樹形結構控制元件,按期要標提供父子結構的表引數即可,很簡單的。
7樓:匿名使用者
what's that...?
怎麼取樹狀結構中某節點的包含其所有父級節點的路徑
8樓:璨恩玉
這樣的用簡單的判斷就行了 :先判斷pid為空的,這個是父節點,然後取出pid為空的id當做取其子節點的父節點,一次判斷就行了,結合列子:取pid為空的id即1,2,然後把取pid等於1和2的id即345和6然後分別掛在1和2下,345就是1的子節點,6是2的子節點,有多節點的一次類推(這只是其中一個簡單的方法)
sql語句查詢出一個父節點下的所有子節點
9樓:西安_白小鵬
假如你的表名字是tt,建立下面的儲存過程,使用儲存過程即可查詢。
create proc querytree
@user varchar(100)
as begin
declare @id int
declare @t_tmp table(id int,username varchar(100),parentid int)
insert into @t_tmp select * from tt where username=@user
while(@@rowcount>0)
begin
insert into @t_tmp select * from tt where parentid in (select id from @t_tmp) and id not in(select id from @t_tmp)
endselect * from @t_tmp where username<>@userend
10樓:匿名使用者
同一個表不能差出來的
不過下面這句可以實現差出所有有父id的條目 如果要在加上 user1那就不行了
select * from user where parentid in (select id from user)
11樓:旁新樹昂然
根據你問題user2,3,4都是user1的子使用者,這個表的parentid就是錯誤了,parentid只想是它父節點
idusername
parentid
1user1 02
user2 13
user3 14
user4
1查詢語句就是
select
*from 表名
where
parentid=(select
idfrom
表名where
username=『user1』)
語句的寫法有很多種,這是其中一種
12樓:匿名使用者
select b.* from tablename a,tablename b where a.id<=b.parentid
and a.username='user1'
13樓:匿名使用者
樓主,我完全沒看明白你的意思。欄位之間的關係你都沒有說清楚。
求英語高手幫忙,求英語高手幫忙!!!!
1.為什麼法國又派兵到非洲?2.為什麼中國被固定在月球上?3.為什麼普京總是遲到?4.為什麼那法國人正在轉向快餐?有無標點符號無關重要 因為1 3確實是特殊疑問句,而2 4不是特殊疑問句,是狀語從句,而且都是原因狀語從句。所以裡面的句子按正常的主謂賓排列!1 3是特殊疑問句,是一個sentence,...
高手幫忙翻譯!急求高手幫忙翻譯!急求
says swimming benefits health greatly.he thought he s absolutely true.teacher isn t inclined to georage s excuse.sign if terms and conditions are ok.t...
求高手幫忙翻譯外文,求高手幫忙翻譯外文11 !
本文描述bai了一家du茶飲料生產公司zhi所進行的支援銷售市場信dao 息系統的研發版 基於對框架的考察,本權文也對其框架進行了一個個案研究。最後 此個案研究提供了一個更好的交流和監督方式,以此可以更好的支援團隊合作。也就相應減少了銷售環節的時間。其他的行業也可以運用其類似的方法來發展用來支援他們...