SQL語句遍歷樹結構的資料表

2021-08-08 19:04:43 字數 2293 閱讀 2203

-- 資料庫為 sql server

create

table treetest(

id int,

parentid int,

info varchar(10)

)-- 插入資料

insert

into treetest(id,parentid,info) values(1,null,'root');

insert

into treetest(id,parentid,info) values(2,1,'two');

insert

into treetest(id,parentid,info) values(3,1,'three');

insert

into treetest(id,parentid,info) values(7,2,'seven');

insert

into treetest(id,parentid,info) values(8,2,'eight');

insert

into treetest(id,parentid,info) values(9,2,'nine');

insert

into treetest(id,parentid,info) values(4,3,'four');

insert

into treetest(id,parentid,info) values(5,3,'five');

insert

into treetest(id,parentid,info) values(6,3,'six');

insert

into treetest(id,parentid,info) values(14,7,'fourteen');

insert

into treetest(id,parentid,info) values(15,7,'fifteen');

insert

into treetest(id,parentid,info) values(16,8,'sixteen');

insert

into treetest(id,parentid,info) values(17,9,'seventeen');

insert

into treetest(id,parentid,info) values(10,4,'ten');

insert

into treetest(id,parentid,info) values(11,5,'eleven');

insert

into treetest(id,parentid,info) values(12,5,'twelve');

insert

into treetest(id,parentid,info) values(13,6,'thirteen');

在 sql 語句中使用 with as 語句,詳細介紹參考:

sql中使用with as提高效能-使用公用表表示式(cte)簡化巢狀sql

-- 遍歷節點id為3的所有子節點

-- 小括號中的引數需與查詢表中的字段個數一致,即兩個 select 關鍵字後的字段個數,有些資料庫不允許第2個select關鍵字後用*號表示所有字段,如oracle

-- temp.id = t.parentid 沒有順序要求,如果改為 temp.parentid = t.id 則語句向上遍歷所有祖先節點

with temp(id,parentid,info)as(

select * from treetest

where id = 3

union

allselect t.* from treetest t,temp

where temp.id = t.parentid

) select * from temp

返回結果:

-- 從id=5的節點開始,向下遍歷所有子孫節點

-- prior 關鍵字可放在 treetest.id 或 treetest.parentid 的前面,決定遍歷的方向

select * from treetest

start

with treetest.id=5

connect

byprior treetest.id = treetest.parentid

ORACLE常用資料表結構修改SQL語句

修改表名 alter table srcrename to dest 修改列名 alter table tablename rename column src to dest 修改列的資料型別 alter table tablename modify col varchar2 255 如果同時需要修...

常用資料表結構修改sql語句(oracle)

修改表名 alter table srcrename to dest 修改列名 alter table tablename rename column src to dest 修改列的資料型別 alter table tablename modify col varchar2 255 如果同時需要修...

維護資料表常用SQL語句

逐漸接觸多人團隊erp軟體開發了。設計發布新的模組時候總結了下以前的同時的風格。總結出下面的經驗。其實這些語法在以往都有研究。但是系統用起來發現還是不那麼容易記得住,所以記下在此。新增資料表說明 execute sp addextendedproperty ms description 資料表說明 ...