如何编写SQL查询获取指定父文章的所有子文章?
文章层级查询解决方案
没问题,我来帮你搞定这两个查询需求,分情况给你详细说明:
1. 仅查询指定父文章的所有直接子文章
如果只需要获取隶属于article_id=61的直接子文章,直接完善你的SQL语句即可,非常简单:
SELECT a.article_id, a.title FROM article a WHERE a.parent_article_id = 61;
这个语句通过筛选parent_article_id等于目标父文章ID(这里是61)的记录,就能精准得到所有直接关联的子文章。
2. 查询父文章及其所有子文章(支持两种场景)
如果需要同时返回父文章本身和它的子文章,分两种场景处理:
场景A:仅包含父文章和直接子文章
如果你的文章只有一级嵌套(子文章没有自己的子节点),可以用UNION ALL合并两个查询结果:
-- 先查询父文章本身 SELECT article_id, title FROM article WHERE article_id = 61 UNION ALL -- 再查询它的直接子文章 SELECT a.article_id, a.title FROM article a WHERE a.parent_article_id = 61;
用UNION ALL而不是UNION的原因是,它不会去重(这里父文章和子文章ID不会重复),执行效率更高。
场景B:包含父文章和所有多级子文章(递归查询)
如果你的文章存在多层嵌套(比如子文章还有自己的子文章),就需要用到递归CTE(公共表表达式),主流数据库(MySQL 8.0+、PostgreSQL、SQL Server等)都支持这种语法:
WITH RECURSIVE article_tree AS ( -- 递归起点:先获取目标父文章 SELECT article_id, parent_article_id, title FROM article WHERE article_id = 61 UNION ALL -- 递归步骤:迭代查询每一级的子文章,关联到上一级节点 SELECT a.article_id, a.parent_article_id, a.title FROM article a JOIN article_tree at ON a.parent_article_id = at.article_id ) -- 最终返回完整的文章树(父节点+所有层级子节点) SELECT article_id, title FROM article_tree;
这个查询会从指定的父文章开始,逐层往下遍历所有子节点,直到没有更多嵌套的子文章为止,返回整个文章层级结构。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

