在工作當中會經常用到遞迴,比如選單的展示。一種方法就是從資料庫中取出所有的資料,然後在程式中迴圈獲取符合條件的資料。另外一種方法就是使用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...