mysql 写一段sql,能够通过父id 获取所有子id
假设有一个表格叫做mytable,包含以下字段:
id:主键idparent_id:父id
则可以通过以下SQL语句获取所有子id:
WITH RECURSIVE cte AS (
SELECT id, parent_id FROM mytable WHERE parent_id = {父id}
UNION ALL
SELECT mytable.id, mytable.parent_id FROM mytable
JOIN cte ON mytable.parent_id = cte.id
)
SELECT id FROM cte;
解释一下上述SQL语句的执行过程:
- 用
WITH RECURSIVE建立一个公共表达式(CTE),名字叫做cte。 - 第一部分是一个SELECT语句,用来获取所有父id为指定父id的行,即根节点。
- 第二部分是一个SELECT语句,用来获取所有子节点。它使用了JOIN语句,将
mytable表格的每一行与cte表达式中的每一行进行连接,找到所有的子节点。这个部分使用了UNION ALL来将两个SELECT语句连接起来。 - 最后在
cte表达式中选择所有的id,即所有子id。
需要注意的是,这个SQL语句使用了递归(RECURSIVE)查询,如果数据量很大,可能会影响性能。
原文地址: https://www.cveoy.top/t/topic/wOu 著作权归作者所有。请勿转载和采集!