Sql递归函数只显示具有指定关系的节点



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

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

对于这个表,我有一个structure_articlerelationship表在这个表中,我有一个链接和一篇文章之间的关系。

结构_粒子

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

那张表上的每一件物品都有一个供应商。现在,我正试图创建一个递归函数来创建树如果我选择了一个特定的供应商,我会点头。

文章表

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

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

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

这是否可能在Sql Server 2008版中使用递归函数进行创建?

我使用了这个代码,问题是我只得到了与相连的文章的点头

         WITH a
     AS (SELECT *
         FROM   structure
         WHERE  parent = 125
         UNION ALL
         SELECT m.*
         FROM   structure m
                JOIN a
                  ON m.parent = a.internidstructure)
SELECT *
FROM   a
WHERE  internidstructure IN (SELECT DISTINCT( internidstructure )
                             FROM   dbo.articles
                                    INNER JOIN dbo.structure_article
                                            ON dbo.articles.internidarticle =
dbo.structure_article.internidarticle
WHERE  ( dbo.articles.internidsupplier IN (SELECT
internidsupplier
                         FROM   site_sup
                         WHERE
internidsite = 1) ))
ORDER  BY parent,
          sortno  

尝试使用左联接而不是内部联接。

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

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

相关内容

  • 没有找到相关文章

最新更新