我在这里创建了一个 SQL 小提琴。
基本上,我有 3 个表BaseTable
,Files
和一个LinkingTable
.
该Files
表有 3 列:PK
、BaseTableId
、RecursiveId
(ChildId)。我想要做的是找到给定一个BaseTableId
(即ParentId)的所有孩子。棘手的部分是找到孩子的方式是这样的:
取ParentId
( BaseTable.BaseTableId
) 1 并使用它FileId
在Files
表中查找 a ,然后使用它FileId
在 中查找ChildId
( LinkingTable.RecursiveId
) LinkingTable
,如果该记录存在,则使用RecursiveId
inLinkingTable
查找表中的下一个FileId
,Files
依此类推。
到目前为止,这是我的 CTE:
with CTE as
(
select lt.FileId, lt.RecursiveId, 0 as [level],
bt.BaseTableId
from BaseTable bt
join Files f
on bt.BaseTableId = f.BaseTableId
join LinkingTable lt
on f.FileId = lt.FileId
where bt.BaseTableId = @Id
UNION ALL
select rlt.FileId, rlt.RecursiveId, [level] + 1 as [level],
CTE.BaseTableId
from CTE --??? and this is where I get lost
...
)
= 1的正确输出BaseTableId
应该是:
FileId|RecursiveId|level|BaseTableId
1 1 0 1
3 2 1 1
4 3 2 1
表关系