使用SQL進行遞迴查詢

2021-09-06 06:07:35 字數 1130 閱讀 9542

在工作當中會經常用到遞迴,比如選單的展示。一種方法就是從資料庫中取出所有的資料,然後在程式中迴圈獲取符合條件的資料。另外一種方法就是使用sql直接讀取符合條件的資料。對於遞迴查詢,t-sql和pl/sql進行了不同的處理。

以表deparment為例

表結構為:

id 部門內碼,

deptcode 部門編碼,

parentdeptid 上級部門內碼

使用t-sql:

with dep as 

( select id,deptcode,deptname from department where id=1

union

allselect d.id,d.deptcode,d.deptname from dep

inner

join department d on dep.id = d.parentdeptid

) select * from dep

簡單解釋一下:with as屬於sql server新特性cte(common table expression)的關鍵字,用來儲存臨時結果集。常用於代替子查詢。本例中可以理解為,找出id=1的記錄後,存放在臨時表dept中,然後臨時表和department進行內連線,找出它的子記錄。子記錄和第一條記錄union後作為dept新的結果集繼續進行內連線,找出新的子記錄。

使用pl/sql:

select id,deptcode,deptname 

from department

start

with id = 1

connect

byprior id = parentdeptid;

start with 表示從哪一行記錄開始遞迴查詢,即根節點 connect by 表示進行遞迴,後面跟遞迴條件 prior 表示前一條記錄,表示上一條記錄的id = 下一條記錄的parentdeptid 比如上面的sql語句就可以理解為,以id 為1的記錄為根節點,遞迴查詢下一條記錄的parentdeptid = 前一條記錄的id

以上,對使用sql進行遞迴查詢進行了簡單的總結,作為備忘錄吧,希望也可以對大家有所幫助,謝謝!

VBA Excel使用SQL進行查詢

sub query dim conn as object,rst as object dim strconn as string,strsql as string dim i as integer,pathstr as string set conn createobject adodb.conne...

遞迴查詢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...