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
(此文也在个人微信公共号ZJCXC发布)
MySQL中单句实现无限层次父子关系查询相关推荐
- Mysql中一千万条数据怎么快速查询
文章来源: 学习通http://www.bdgxy.com/ 目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应 ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...
一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...
- mysql中len是什么意思_MySQL的查询计划中ken_len的含义
本文首先介绍了MySQL的查询计划中ken_len的含义:然后介绍了key_len的计算方法:最后通过一个伪造的例子,来说明如何通过key_len来查看联合索引有多少列被使用. key_len的含义 ...
- mysql中如何将几个没有关系的结果集放在一起
昨天在做报表的时候,遇到要把类型A的数据和类型B的数据横向放在一个表中展示,两个之间没什么关系,哪个的数据量多也不确定,废了段时间,才折腾出如下的解决方法:需要将SELECTes.nameprimar ...
- mysql中增加45天三小时_MySQL查询以45天为间隔添加天数并在新列中显示输出
为此,您可以使用date_add().让我们首先创建一个表-mysql> create table DemoTable1930 ( DueTime datetime ); 使用插入命令在表中插入 ...
- mysql中的参数如何调试_mysql 查询优化 ~ 查询参数调节
mysql优化基础之参数调节 一 简介:我们谈谈如何调节mysql参数加速查询 二 相关参数 1 排序参数 sort_buffer_size 当出现order by时会利用到这个参数,当数据量超过内存 ...
- mysql中in嵌套多层时_sql 嵌套查询 in
嵌套查询是将一个select 查询放到另一个查询的where 子句中去 如:查询"xx"同学的所修课程及分数 1.先选择姓名为"xx"的同学的学号 selec ...
- mysql中having的例子_mysqlgroupby/having/distinct查询使用例子_MySQL
表的内容如下: //查询单分数最高的人ID select stuid,max(score) from stu_select_class; // 查询各科总分2-3名的学生 select stuid, ...
- MySQL 中 delete where in 语句的子查询限制
根据ID删除数据,代码如下: DELETE FROMt_swcas_db_sync_send_task WHEREid IN (SELECTb.id AS idFROMt_swcas_db_old_p ...
最新文章
- vue-cli的使用
- 详解单链表经典OJ题
- 【Python】全网最新最全Pyecharts可视化教程(一)
- 括号配对问题_栈stack
- MySQL(六)常用语法和数据类型
- 非常详细的Exchange 功能路线图
- 人脸检测江湖的那些事儿——从旷视说起
- rsa前后端加密流程_不懂前后端分离?这篇就够了
- 基于C语言EOF与getchar()的使用详解
- flux服务器推消息,服务端主动推送数据,除了 WebSocket 你还能想到啥?
- HTML-CSS线性渐变
- android刷机教程 华为,华为的安卓手机该怎么刷机
- html 菜鸟驿站,菜鸟驿站
- 洛谷P5708 【深基2.习2】三角形面积__C++描述
- 【Linux数据库注意问题】java.sql.SQLSyntaxErrorException: Table ‘e.USER‘ doesn‘t exist
- 数据库面试题SQL篇
- MVP、EMC、CRM、IoT、边缘计算盒子、系统群控、数字化赋能、EMS、冷媒
- tf.Variable
- [Revit二次开发] 轴网交点创建柱子
- oracle静默安装报错,静默安装Oracle11gR2 [FATAL] [INS-32015]报错
热门文章
- 有关颜色敏感度测试的软件是啥,色彩敏感度测试:你是色盲吗?
- 使用Jenkins自动编译我的.net 项目
- 伯德图 matlab,matlab画三维伯德图,bode图
- 台风下雨天出行要注意 穿鞋不当危害足部健康
- 董明珠的权力危机:半年两位元老出局,格力进入动荡时刻
- 大学生电子设计大赛最全资料
- 成为职业游戏建模师有没有前景,未来自己该如何发展学习
- 基于词典的细粒度情感分析
- 武汉 华为 android,【武汉华为手机大全】武汉华为手机报价及图片大全-列表版-ZOL中关村在线...
- mac网易邮箱smtp服务器,网易企业邮箱MAC mail客户端设置