1、既然要談到sql,資料庫表是必須的
2、資料結構
3、獲取某個節點的所有子節點
傳統的寫法(sql2000) 很麻煩,暫且就不寫了
來看看cte的寫法
create proc sp_gettreebyid(@treeid測試一下啊int)
asbegin
with
ctetree
as (select
*from
tuzitree
where id =
@treeid
--第乙個查詢作為遞迴的基點(錨點)
union
allselect 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/%'了
這樣就會簡單很多,加上索引。
總結:
如果在效能的需要上,我們可以採用按需載入,點選節點時候 才會載入其所有子節點。
如果在變化不大的情況下,可以採用快取。這樣的處理 可以滿足很多業務需求。
良好的表設計會給後期的開發以及需求變化 帶來更多的便利。
下次繼續總結sql方面的知識,案例一切以實際工作演變而來。
SQL 遞迴查詢範例應用
前段時間因為單位oa的替換,需要做一些上下級的遞迴查詢,一直沒找到辦法。網上找了下資料,心中大概有個數了。先建立2個表 create table dept deptno int primary key,dname varchar 20 loc varchar 20 sjdeptno int inse...
遞迴查詢SQL
lz需要的修改自己為對應的,csdn sqlserve大版主 鄒建 我轉貼並且完善一下 測試資料 create table tb id char 3 pid char 3 name nvarchar 10 insert tb select 001 null 山東省 union all select ...
SQL遞迴查詢
create table t bid int,p bid int insert into t select 1,null union all select 2,1 union all select 3,1 union all select 4,3 union all select 5,4 union...