Sql递归函数仅显示具有特定关系的点头

时间:2016-05-19 14:31:16

标签: sql-server conditional-statements recursive-query relational

我有一个带ID和parentID的链接结构表。

$(findwstring a, angle b c)

到这个表我有一个structure_article关系表 在这个表中,我有链接和文章之间的关系。

struture_article

ID, Parent, name
1,1
2,1
3,2
4,3
5,3 

该表中的每篇文章都有供应商。 现在我正在尝试创建一个创建树的递归函数 如果我选择一个特定的供应商,请点头。

文章表

structid, articleID
4,1000
4,1001
5,1002

如果我选择供应商1的文章,那么我希望该功能向我展示包含该供应商的文章的树结构。

我在DB中有20个供应商和300个链接,现在我只想显示我选择的供应商的文章。我不想要任何空洞的点头。

甚至可以在Sql Server 2008版本中使用递归函数创建吗?

我对这段代码感到害怕,问题是我只得到连接文章的点头

ArticleID, SUPPLIER ID
1000,1
1001,2
1002,2 

2 个答案:

答案 0 :(得分:0)

尝试使用左连接而不是内连接。

答案 1 :(得分:0)

我不确定是否了解您的需求,但如果您想要一个没有未链接到供应商的节点的新树表,则此查询可以正常工作。

WITH A AS
(
SELECT S.ID as ID, S.Parent as Parent, 1 as art_linked
FROM   structure S
       INNER JOIN dbo.structure_article SA 
            ON S.ID = SA.structid
       INNER JOIN Article AR
            ON  AR.ArticleID = SA.ArticleID
WHERE  AR.SupplierID = 1

UNION ALL
SELECT S.ID, S.Parent, 0
FROM   structure S
       INNER JOIN A
              ON A.parent = S.ID
WHERE S.ID <> S.Parent
)

SELECT A.ID, A.Parent, MAX(A.art_linked)
FROM A
GROUP BY A.ID, A.Parent