在SQL Server中,我有以下情況:過濾遞歸SQL查詢相交的可能,並choosen項目
選項和相關羣體:
Groups(Id, Description) Options(Id, GroupId, Description)
節點配置了選項:
Nodes(Id, ParentNodeId, Description) Configurations(Id, NodeId, OptionId)
因此,一個節點可以有一個或多個選項,但一個每組
用戶選擇:
Choices (Guid, OptionId)
在輸出I想有節點,以遞歸方式,配置選擇選項。 例如:
Groups
1, "Eyes Color"
2, "Hair Color"
Options
1, 1, "Blue"
2, 1, "Brown"
3, 2, "Blonde"
4, 2, "Black"
Nodes
1, NULL, "Elizabeth"
2, NULL, "John"
Configurations
1, 1, 1 --(Elizabeth, Blue)
1, 1, 3 --(Elizabeth, Blonde)
2, 1, 4 --(John, Black)
可能的選擇:
Eyes Color: NULL -- it means there isn't record in choices table for this option
Hair Color: NULL
Result: Elizabeth, John
Eyes Color: "Blue"
Hair Color: NULL
Result: Elizabeth, John
Eyes Color: "Brown"
Hair Color: NULL
Result: John
Eyes Color: NULL
Hair Color: "Blonde"
Result: Elizabeth
Eyes Color: NULL
Hair Color: "Black"
Result: John
Eyes Color: "Blue"
Hair Color: "Black"
Result: John
Eyes Color: "Blue"
Hair Color: "Blonde"
Result: Elizabeth
Eyes Color: "Brown"
Hair Color: "Blonde"
Result: -
Eyes Color: "Brown"
Hair Color: "Black"
Result: John
我的第一個問題是過濾。第二個問題是在遞歸中過濾不分析節點是否包含節點的子節點。
遞歸:
with livelliRec
as
(
select
0 as level, nodeid, parentid
from nodes
union all
select
livellirec.level+1, nodes.nodeid, nodes.parentid
from nodes
join livelliRec on nodes.parentid = livellirec.nodeid
)
我發現了一個可能的解決方案列出所有可能的項目,當一個節點未配置爲組,然後驗證所有choosen項目在可能的項目。但如何編寫查詢來執行它?
在此先感謝。
是否應父節點被選擇? –
是的,它可以。每個節點都可以配置。這是錯誤的,相反:我不包括不包含父節點的孩子 – Emanuele