我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL一条语句递归查询所有子集数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL一条语句递归查询所有子集数据

MySQL中,现有一组数据,数据包含字段主键:id,父类ID:pid,id与pid是继承关系,根据某个id查询其下级关联的所有记录;
1、利用递归查询语法。递归查询是在 MySQL 8.0 版本引入的新特性,如果您的 MySQL 版本低于 8.0,则无法使用递归查询语法。

WITH RECURSIVE sub_items AS (    SELECT id, pid, name    FROM items    WHERE id = 1    UNION ALL    SELECT i.id, i.pid, i.name    FROM items i    INNER JOIN sub_items si ON si.id = i.pid)SELECT * FROM sub_items;

在上面的语句中,使用了 Common Table Expressions (CTE) 和递归查询来实现。首先,定义了一个 CTE sub_items,其中包含了 ID 为 1 的记录。然后,使用 UNION ALL 将这个记录和其下级记录合并起来,一直递归下去,直到找到所有下级记录。最后,在最外层使用 SELECT 语句查询并返回这些记录。
在实际使用时,需要将语句中的 items 替换成实际的表名,将 id、pid、name 替换成实际的字段名,将 1 替换成要查询的 ID。

MySQL 8.0以下可以使用自连接查询实现递归查询:

SELECT * FROM (    SELECT id, pid, name FROM items  WHERE id = 1    UNION ALL    SELECT i.id, i.pid, i.name    FROM items  i    INNER JOIN (        SELECT * FROM (            SELECT id, pid, name FROM items  WHERE id = 1            UNION ALL            SELECT id, pid, name FROM items WHERE pid = 1        ) t1    ) t2 ON i.pid = t2.id) t3

在上面的语句中,使用了两个子查询,第一个子查询获取 ID 为 1 的记录,第二个子查询获取 ID 为 1 的记录以及其下级记录。然后,使用 UNION ALL 将这两个子查询的结果合并起来,实现递归查询。
在实际使用时,需要将语句中的 items 替换成实际的表名,将 id、pid、name 替换成实际的字段名,将 1 替换成要查询的 ID。

来源地址:https://blog.csdn.net/MoonJo_M/article/details/130218553

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL一条语句递归查询所有子集数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL一条语句递归查询所有子集数据

MySQL中,现有一组数据,数据包含字段主键:id,父类ID:pid,id与pid是继承关系,根据某个id查询其下级关联的所有记录; 1、利用递归查询语法。递归查询是在 MySQL 8.0 版本引入的新特性,如果您的 MySQL 版本低于
2023-08-17

MySQL中如何通过一条语句描述数据库中的所有表?

您可以使用 INFORMATION_SCHEMA.COLUMNS 通过一条语句来描述数据库中的所有表。语法如下。SELECT *FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=&rsqu
2023-10-22

编程热搜

目录