0
我有一個典型的父/子關係表來表示文件夾。我的挑戰是將它與另一個表一起使用。帶有關聯表的SQL Server遞歸查詢
的folder
表是這樣的:
+--+----+--------+
|id|name|parentid|
+--+----+--------+
|1 |a |null |
+--+----+--------+
|2 |b |1 |
+--+----+--------+
|3 |c1 |2 |
+--+----+--------+
|4 |c2 |2 |
+--+----+--------+
的association
表是這樣的:
+--+--------+
|id|folderid|
+--+--------+
|66|2 |
+--+--------+
|77|3 |
+--+--------+
使其中association.id = 66
有folder.id = 2
的關係,我需要什麼做的是找到第一個祖先的association.id
association
表中的記錄。。使用上面的示例數據,給出folder.id
的3
我期望找到77
;給定folder.id
的2
或4
我期待找到66
;任何其他folder.id
值都會找到空值。
WITH [recurse] (id,name,parentid,lvl) AS
(
select a.id,a.name,a.parentid,0 FROM folder AS a
WHERE a.id='4'
UNION ALL
select r.id,r.name,r.parentid,lvl+1 FROM folder as r
INNER JOIN [recurse] ON recurse.parentid = r.id
)
SELECT * from [recurse] ORDER BY lvl DESC
產生的結果:
查找文件夾祖先可以用公用表表達式這樣做
+--+----+--------+---+
|id|name|parentid|lvl|
+--+----+--------+---+
|1 |a | |2 |
+--+----+--------+---+
|2 |b |1 |1 |
+--+----+--------+---+
|4 |c2 |2 |0 |
+--+----+--------+---+
要包括association.id
我在遞歸使用LEFT JOIN
嘗試部分CTE,但這是SQL Server不允許的。
我對此有什麼解決方法?
或者更好的辦法是直接查詢特定的association.id
? (例如,沒有遍歷我已經嘗試的CTE查詢的結果)
謝謝!我一直想着如何使用遞歸語句,並沒有考慮使用結果。 – jltrem