日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL语句遍历树结构的数据表

發(fā)布時間:2025/5/22 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL语句遍历树结构的数据表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[轉(zhuǎn)自]:肆尾蔥的博客《SQL語句遍歷樹結(jié)構(gòu)的數(shù)據(jù)表》

一、創(chuàng)建樹結(jié)構(gòu)的數(shù)據(jù)庫表

-- 數(shù)據(jù)庫為 SQL Server create table treeTest(id int,parentId int,info varchar(10) )-- 插入數(shù)據(jù) 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 遍歷方法

在 SQL 語句中使用 with as 語句,詳細(xì)介紹參考:
SQL中使用WITH AS提高性能-使用公用表表達(dá)式(CTE)簡化嵌套SQL

-- 遍歷節(jié)點id為3的所有子節(jié)點 -- 小括號中的參數(shù)需與查詢表中的字段個數(shù)一致,即兩個 select 關(guān)鍵字后的字段個數(shù),有些數(shù)據(jù)庫不允許第2個select關(guān)鍵字后用*號表示所有字段,如oracle -- temp.id = t.parentId 沒有順序要求,如果改為 temp.parentId = t.id 則語句向上遍歷所有祖先節(jié)點 with temp(id,parentId,info) as (select * from treeTestwhere id = 3union allselect t.* from treeTest t,tempwhere temp.id = t.parentId ) select * from temp

返回結(jié)果:

三、Oracle 特有的樹遍歷方法

-- 從id=5的節(jié)點開始,向下遍歷所有子孫節(jié)點 -- prior 關(guān)鍵字可放在 treeTest.id 或 treeTest.parentId 的前面,決定遍歷的方向 select * from treeTest start with treeTest.id=5 connect by prior treeTest.id = treeTest.parentId

總結(jié)

以上是生活随笔為你收集整理的SQL语句遍历树结构的数据表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。