我有一个带有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