mysql查询树型结构表,前三级数据

mysql查询树型结构表,前三级数据
树型表 主键id 名字name 父级id parent_uuid
SELECT bs.id as id,bs.name as name,bs.parent_uuid as parent_id from bs;
第一个数据的父级id是 root
求前三级数据有哪些?
求所有的第四级数据有哪些?
我用了inner join 内连接 但是写的太长了 不知道有没有更好的方法?

用递归啊,你的需求说出来不就是常用思路了嘛,比如

WITH Cte AS (
  SELECT id, name, parent_uuid, 1 AS level
  FROM bs
  WHERE parent_uuid = 'root' 
  UNION ALL
  SELECT bs.id, bs.name, bs.parent_uuid, tree.level + 1
  FROM bs
  INNER JOIN tree ON bs.parent_uuid = tree.id
)
SELECT id, name, parent_uuid
FROM Cte
WHERE level <= 3;


使用子查询和左连接,先查出第一级的数据,然后将原表左连接到第一级数据上,连接条件是第一级数据的id=原表数据父级id。然后用同样的方法关联第三级数据、第四级数据

【以下回答由 GPT 生成】

对于查询树型结构表的前三级数据,可以通过递归查询的方式实现。首先,我们可以先查询出第一级的数据,即父级id为root的数据,然后再通过循环查询每个第一级数据的子节点,再进一步查询每个子节点的子节点,直到查询到第三级为止。

以下是一个使用MySQL递归查询的示例代码:

-- 查询根节点(第一级)
SELECT bs.id as id, bs.name as name, bs.parent_uuid as parent_id
FROM bs
WHERE bs.parent_uuid = 'root';

-- 递归查询第二级和第三级
WITH RECURSIVE tree AS (
  SELECT bs.id as id, bs.name as name, bs.parent_uuid as parent_id, 1 AS level
  FROM bs
  WHERE bs.parent_uuid = 'root'
  UNION ALL
  SELECT bs.id as id, bs.name as name, bs.parent_uuid as parent_id, tree.level + 1
  FROM bs
  JOIN tree ON tree.id = bs.parent_uuid
  WHERE tree.level < 3 -- 设置查询的层级数
)
SELECT *
FROM tree;

上述代码中使用了递归查询的方法来查询树型结构表的前三级数据。首先通过第一个查询语句查询出第一级的数据,然后在递归查询中使用tree作为递归的表名,并建立连接条件JOIN tree ON tree.id = bs.parent_uuid,保证每次循环查询都是在上一级的基础上进行的。递归查询的终止条件是tree.level < 3,即查询层级小于3时停止递归。

如果要查询所有的第四级数据,可以将终止条件修改为tree.level = 3,即查询层级等于3的数据,示例如下:

-- 查询第四级数据
WITH RECURSIVE tree AS (
  SELECT bs.id as id, bs.name as name, bs.parent_uuid as parent_id, 1 AS level
  FROM bs
  WHERE bs.parent_uuid = 'root'
  UNION ALL
  SELECT bs.id as id, bs.name as name, bs.parent_uuid as parent_id, tree.level + 1
  FROM bs
  JOIN tree ON tree.id = bs.parent_uuid
  WHERE tree.level = 3 -- 查询第四级数据
)
SELECT *
FROM tree;

希望以上解决方案对您有帮助。如果还有其他问题,请随时追问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^