Cos*_*smo 2 sql sql-server recursion stored-procedures
我有两个 MS SQL 表:类别、问题。每个问题都被分配到一个类别。一个类别可能有许多子类别。
如何递归计算给定类别的所有问题(包括子类别中的问题)。我已经根据几个教程尝试过它,但仍然无法弄清楚:(
with /* recursive */ category_tree as (
select category.id as top_category_id, category.id as category_id
from category
union all
select top_category_id, category.id
from category_tree
join category on category.idparent = category_tree.category_id
)
select category_tree.top_category_id as category, count(*) as question_count
from category_tree
join question on question.idcategory = category_tree.category_id
group by category_tree.top_category_id
Run Code Online (Sandbox Code Playgroud)
CTE 构建了一个列表,列出每个类别下的子类别 - 本质上,它遍历树并生成(顶级类别,后代类别)的扁平视图。
初始项(在并集之前)选择每个类别,并指示它包含自身 - 递归项然后包括迄今为止找到的类别的所有子类别,并在前一个类别中的所有 category_id 列时自动停止(不产生结果)迭代是叶子类别。
在此基础上,我们简单地将这个扁平化视图连接回问题以生成一组(顶级类别,问题)行,并基于(顶级类别)进行聚合。