MySQL 获取所有子 ID (不使用 WITH 语句)
假设有一个名为 category 的表,表结构如下:
CREATE TABLE category (
id INT PRIMARY KEY,
name VARCHAR(50),
parent_id INT
);
其中,parent_id 表示父类别的 id。
以下是通过父 id 获取所有子 id 的 SQL 语句:
SELECT id FROM category WHERE parent_id = {父id}
UNION ALL
SELECT c.id FROM category c
INNER JOIN (
SELECT id FROM category WHERE parent_id = {父id}
) sub ON c.parent_id = sub.id;
解释一下 SQL 语句的执行流程:
- 第一条 SELECT 语句查询出所有直接属于该父 id 下的子 id。
- 第二条 SELECT 语句查询出所有属于该父 id 下的子孙 id。其中,使用了子查询语句,查询出所有直接属于该父 id 下的子 id,然后再与 category 表进行关联查询,查询出所有属于该父 id 下的子孙 id。
- 使用 UNION ALL 将两条查询结果合并。
通过这段 SQL 语句,就可以获取到所有的子 id 了。
原文地址: https://www.cveoy.top/t/topic/lJXo 著作权归作者所有。请勿转载和采集!