假设有一个表格叫做mytable,包含以下字段:

  • id:主键id
  • parent_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语句的执行过程:

  1. WITH RECURSIVE建立一个公共表达式(CTE),名字叫做cte
  2. 第一部分是一个SELECT语句,用来获取所有父id为指定父id的行,即根节点。
  3. 第二部分是一个SELECT语句,用来获取所有子节点。它使用了JOIN语句,将mytable表格的每一行与cte表达式中的每一行进行连接,找到所有的子节点。这个部分使用了UNION ALL来将两个SELECT语句连接起来。
  4. 最后在cte表达式中选择所有的id,即所有子id。

需要注意的是,这个SQL语句使用了递归(RECURSIVE)查询,如果数据量很大,可能会影响性能。

mysql 写一段sql,能够通过父id 获取所有子id

原文地址: https://www.cveoy.top/t/topic/wOu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录