在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