在SQL

时间:2015-10-06 09:07:56

标签: sql sql-server

我有一个列出公司的表格,以及将这些公司联系在一起形成所有权层级的表格:

dbo.Suppliers:

  • 编号
  • 名称

dbo.SupplierLinks:

  • 供应商ID
  • 的ParentId

我想创建一个存储过程(或函数?),它接受供应商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'

*注意:上面的链接表中不存在顶级父级供应商1。

1 个答案:

答案 0 :(得分:1)

查看Recursive Queries Using Common Table Expressions

plot "dat1.dat" using 1:2 linetype 1 title "data",\
     "dat2.dat" using 1:($2*5) linetype 1 notitle`