【发布时间】:2015-10-06 09:07:56
【问题描述】:
我有一个列出公司的表,以及一个将这些公司链接在一起以形成所有权层次结构的表:
dbo.供应商:
- 身份证
- 姓名
dbo.SupplierLinks:
- 供应商 ID
- 父母身份
我想创建一个存储过程(或函数?),它接受供应商 ID,并返回所有链接(直接或间接)供应商的行。
当然,这不会返回间接链接的供应商:
DECLARE @SupplierId int
SET @SupplierId = 5
SELECT *
FROM Config.SupplierLinks sl
WHERE sl.ParentId = @SupplierId
OR sl.SupplierId = @SupplierId
我怎样才能做到这一点?
例子:
Supplier 1
|
/ \
2 3
|
/\
5 4
数据:
Id ParentId Name
4 3 'Supplier 4'
5 3 'Supplier 5'
3 1 'Supplier 3'
2 1 'Supplier 2'
*注意:Supplier 1,顶级父级,在上面的链接表中不存在。
【问题讨论】:
-
请提供一些示例数据和预期结果。
-
使用/查找 CTE(递归)来创建您的层次结构。
标签: sql sql-server