開發的時候有個需求,就是根據前台選擇的編碼,然后查找該節點下所有的結果集,后來百度了一下 sql中 也有遞歸,
先看下結果
with tmps as
(
select * from dbo.t_ew_dutyRelation where parentCode = 'parent2'
union all
SELECT d2.* from tmps
inner join t_ew_dutyRelation d2 on tmps.dutyCode = d2.parentCode
)
SELECT * FROM tmps
簡單解釋一下:
with as屬於sql server新特性CTE(Common Table Expression)的關鍵字,用來儲存臨時結果集。常用於代替子查詢。
上面demo中可以理解為,找出父節點為“parent2”的記錄后,存放在臨時表tmps 中,然后臨時表和t_ew_dutyRelation進行內連接,找出它的子記錄。子記錄和第一條記錄union后作為tmps 新的結果集繼續進行內連接,找出新的子記錄。
大家如果有什么更好的方法,可以說出來,共同學習!