我有一个层次结构Article
,每个Article
都有一个属性IsCommentable
。这可以采用 true、false 或 NULL 值。如果为 NULL,则表示它继承了基于其父级的值。文章可以递归嵌套,“深度”没有限制。
现在,我需要进行查询,从数据库中获取所有可评论的文章。有什么方法可以通过 SQL 查询加载这些?
假设您使用的是 SQL Server,您可以使用递归 CTE来完成。
WITH cte (id, iscommentable) AS (
SELECT id, iscommentable FROM Article WHERE iscommentable IS NOT NULL
UNION ALL
SELECT a1.id, a2.iscommentable FROM Article a1
INNER JOIN cte a2 ON a1.parent=a2.id
WHERE a1.iscommentable IS NULL
)
SELECT * FROM cte
SQL 小提琴示例。