• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 如何让MySQL中单句实现无限层次父子关系查询

如何让MySQL中单句实现无限层次父子关系查询

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,递归等相关知识,希望本文的分享对您有所帮助
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。
在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。

表结构和数据

CREATE TABLE table1(id int, name varchar(10), parent_id int); 
INSERT table1 VALUES 
(1, ‘Home’,        0), 
(2, ‘About’,       1), 
(3, ‘Contact’,     1), 
(4, ‘Legal’,         2), 
(5, ‘Privacy’,      4), 
(6, ‘Products’,   1), 
(7, ‘Support’,     2);

查询 id = 5 的所有父级

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @id as _id, 

        (   SELECT @id := parent_id 

            FROM table1 

            WHERE id = @id 

        ) as _pid, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @id := 5, @l := 0 ) b 

    WHERE @id > 0 
) ID, table1 DATA 
WHERE ID._id = DATA.id 
ORDER BY level;

根据这个父级查询方法,很容易可以写出查所有子级的,下面的查询 id=2 的所有子级

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @ids as _ids, 

        (   SELECT @ids := GROUP_CONCAT(id) 

            FROM table1 

            WHERE FIND_IN_SET(parent_id, @ids) 

        ) as cids, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @ids :=’1’, @l := 0 ) b 

    WHERE @ids IS NOT NULL 
) id, table1 DATA 
WHERE FIND_IN_SET(DATA.id, ID._ids) 
ORDER BY level, id

本文讲解了如何让MySQL中单句实现无限层次父子关系查询,更多相关内容请关注微课江湖。

相关推荐:

带进度的SQL Server FileStream如何存取

当忘记 SQL Server 管理员密码该如何处理

浅析MySQL中concat以及group_concat的使用

以上就是如何让MySQL中单句实现无限层次父子关系查询的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05MySQL与MSSQl使用While语句循环生成测试数据的代码
  • 2018-12-05SqlServer 索引自动优化工具
  • 2018-12-05MySQL 5.5 range分区增加删除处理实例详解
  • 2017-05-11MySQL笔记之运算符使用详解
  • 2017-05-11Mysql InnoDB删除数据后释放磁盘空间的方法
  • 2017-05-11解析mysql中:单表distinct、多表group by查询去除重复记录
  • 2018-12-05MSSQL SERVER 2005 数学函数整理
  • 2018-12-05MySQL数据库密码如何修改?
  • 2017-05-11介绍一个针对C++程序的MySQL访问库soci
  • 2018-12-05 把redis放在DATA层,作为一种数据源,我认为更合理,也更符合我的面向对象原则

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 通过SQL语句来备份,还原数据库
    • MySQL数据库的id不递增怎么办
    • mysql安装后添加gbk字符集的方法
    • SQLServer2005安装提示服务无法启动原因分析及解决
    • Mysql5.5 InnoDB存储引擎配置和优化
    • 谈谈SQL查询字段被包含语句问题
    • SQL Server 2008 处理隐式数据类型转换在执行计划中的增强
    • 64位Win10系统安装Mysql5.7.11的方法(案例详解)_MySQL
    • MySql 安装与使用图文教程
    • MySQL 中处理 Null 时要注意两个陷阱

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有