iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL一条语句递归查询所有子集数据
  • 180
分享到

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

mysql数据库sql 2023-08-17 07:08:36 180人浏览 泡泡鱼
摘要

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

您可能感兴趣的文档:

--结束END--

本文标题: MySQL一条语句递归查询所有子集数据

本文链接: https://www.lsjlt.com/news/372461.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作