让MySQL中单句实现无限层次父子关系查询的方法
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关让MySQL中单句实现无限层次父子关系查询的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 SQL Server 中,使用 CTE
千家信息网最后更新 2025年11月07日让MySQL中单句实现无限层次父子关系查询的方法
这篇文章将为大家详细讲解有关让MySQL中单句实现无限层次父子关系查询的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。
在 MySQL 中,这个需求的实例稍显复杂, 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中单句实现无限层次父子关系查询的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
查询
递归
层次
方法
父子
函数
支持
单句
更多
篇文章
表达式
不错
复杂
实用
独特
别扭
内容
实例
想法
教程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小米重装系统保留数据库
软件开发cmmi过程
网易服务器1.17崩服小技巧
新一代网络技术虚拟仿真实训基地
5m的服务器
ssr服务器订阅链接
网络安全方向要学什么语言
好久没做软件开发
警惕网络安全隐患标语
软件开发的最大问题是什么
成都电商软件开发要多少钱
软件开发创业分析
学校网络服务器管理人员
工资录入数据库
远程重启ip服务器
数据库定义的类型数据
信息技术及软件开发企业
超市管理系统怎么设计数据库
华三服务器外部健康灯闪烁
税务网络安全演练
滴滴车主4g连接不上服务器
佛山rpa软件开发
关于网络安全建言献策
共守网络安全的海报
网络安全方面的电视节目
科学技术研究所大数据库
网络技术培训 北京
福建网络安全培训服务机构
鹏宵服务器销量怎么样
软件开发专业可以学高数吗