1、既然要談到sql,資料庫表是必須的
2、資料結構
3、獲取某個節點的所有子節點
傳統的寫法(sql2000) 很麻煩,暫且就不寫了
來看看cte的寫法
create proc sp_gettreebyid(@treeid int)測試一下啊asbegin
with ctetree
as (select *
from tuzitree
where id = @treeid --第乙個查詢作為遞迴的基點(錨點)
union all
select tuzitree.* --第二個查詢作為遞迴成員, 下屬成員的結果為空時,此遞迴結束。
from
ctetree inner join tuzitree on ctetree.id = tuzitree.parentid)
select *
from ctetree
end
exec sp_gettreebyid @treeid=1001結果
![](https://pic.w3help.cc/646/10212360d29985909ef582fcd2f4f.jpeg)
4、使用節點路徑來做(每個節點路徑都儲存自身的路徑和所有父節點的路徑=自己和所有父節點的關聯)
5、既然有個路徑
那麼查詢其所有子節點 只需要 where nodepath like '/1001/%'了
這樣就會簡單很多,加上索引。
總結:
如果在效能的需要上,我們可以採用按需載入,點選節點時候 才會載入其所有子節點。
如果在變化不大的情況下,可以採用快取。這樣的處理 可以滿足很多業務需求。
良好的表設計會給後期的開發以及需求變化 帶來更多的便利。
SQLServer 遞迴查詢
感謝文章遞迴查詢,正好趁此機會梳理一下資料庫的遞迴查詢 公用表表示式 cte 可以認為是在單個 select insert update delete 或 create view 語句的執行範圍內定義的臨時結果集。公用表表示式可以包括對自身的引用,這種表示式稱為遞迴公用表表示式。with expre...
sqlserver 遞迴查詢
有如下資料表 假如我們要查詢id為003的資料的所有子節點我們可以使用cte 遞迴查詢完成.sql view plain copy print?if object id tb n is notnull drop table tb create table tb id varchar 3 pid va...
sqlserver 遞迴查詢
構建遞迴結構的表 資料是虛構的 drop table t create table t id int,name varchar 6 pid int insert into t select 1,安徽 0 union all select 2,安慶 1 union all select 3,安慶市 2...