sql server遞迴查詢

2022-01-11 18:47:34 字數 1390 閱讀 5287

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
結果

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...