MySQL 递归查询:通过父 ID 获取所有子 ID

假设有一个表格叫做 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) 查询,如果数据量很大,可能会影响性能。
  • 请将 父 ID 替换为实际的父 ID 值。
MySQL 递归查询:通过父 ID 获取所有子 ID

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

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