sql實際應用 遞迴查詢

2022-01-30 11:01:22 字數 1532 閱讀 9846

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