求高手幫忙sql寫法 樹節點放表中,怎麼用一條語句查詢節點及對應的所有父節點資訊

2021-05-05 01:42:50 字數 4733 閱讀 9133

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 息系統的研發版 基於對框架的考察,本權文也對其框架進行了一個個案研究。最後 此個案研究提供了一個更好的交流和監督方式,以此可以更好的支援團隊合作。也就相應減少了銷售環節的時間。其他的行業也可以運用其類似的方法來發展用來支援他們...