假设有一个名为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语句的执行流程:

  1. 第一条SELECT语句查询出所有直接属于该父id下的子id。
  2. 第二条SELECT语句查询出所有属于该父id下的子孙id。其中,使用了子查询语句,查询出所有直接属于该父id下的子id,然后再与category表进行关联查询,查询出所有属于该父id下的子孙id。
  3. 使用UNION ALL将两条查询结果合并。

通过这段sql语句,就可以获取到所有的子id了。

写一段mysql支持的sql,能够通过父id 获取所有子id 不用with语句

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

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