MySQL 递归查询:通过父 ID 获取所有子 ID
MySQL 递归查询:通过父 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) 查询,如果数据量很大,可能会影响性能。
- 请将
父 ID替换为实际的父 ID 值。
原文地址: https://www.cveoy.top/t/topic/lJWz 著作权归作者所有。请勿转载和采集!