mysql 父子关系查询_如何让MySQL中单句实现无限层次父子关系查询
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。
在 MySQL 中,这个需求的实例稍显复杂, 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中单句实现无限层次父子关系查询,更多相关内容请关注php中文网。
相关推荐:
mysql 父子关系查询_如何让MySQL中单句实现无限层次父子关系查询相关推荐
- MySQL中单句实现无限层次父子关系查询
在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询:在不支持CTE表达式的版本中,借助函数递归也可以轻松实现. 在 MySQL 中,这个需求的实例稍显复杂, MySQL ...
- mysql水果表查询_最全MySQL数据库表的查询操作
序言 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接).LEFT JOIN(左连接).RIGHT JOIN(右连接)等一些复杂查询. 通过本节的学习,可 ...
- mysql select符合查询_数据库select group by 和having语句 多表连接查询 复合查询
1.SELECT --group by 子句 group by子句按照指定的列column_name对表数据进行分组 group by 后面跟的列也叫分组特性列 使用group by后,能选择的列 ...
- mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)
在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...
- mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...
在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...
- oracle锁表查询_专业解决 MySQL 查询速度慢与性能差
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...
- mysql 记录 行号_如何在MySQL查询结果集中得到记录行号
如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准 ...
- mysql版本号查询_三、mysql登录详解及版本号查询
1.用window+r,输入cmd,用mysql -uuser -ppassword登录时出现'mysql'不是有效的内部命令? 答:这是因为没有配置MySQL的环境变量path所致. MySQL的环 ...
- MySQL多重条件模糊查询_简单实现mysql多字段模糊查询
在后台的项目中,会经常遇到,就是信息的查找,这里就举个简单的例子,如搜索某一个产品的信息,在一个表里面有多个字段,而搜索的内容可能是其中的某个字段,这样只有多字段查询才能实现. MySQL多字段模糊查 ...
- mysql子查询_笔记之MySQL子查询
子查询 students(学生表),scores(成绩表).courses(课程表) 子查询:在select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询 ...
最新文章
- 浪潮的加班标语炸了,这是顶风作案?网传:1月加班87小时还要扣工资?
- python安装教程3.8.5-怎么安装最新Python3.8.5-新手入门教程必看
- ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
- EOS账户系统(7)权限评估
- 最简单的opencv安装方法----利用annaconda安装opencv
- Ajax Loading进度gif在线生成
- C++socket编程(七):7.1 http协议讲解,通过抓包和telnet分析
- python基础之类的属性方法、魔术方法普通方法
- 网页跳转出现内部服务器错误,页面跳转后提示HTTP异常500(InternalServerError):服务器尝试执行请求时遇到了意外情况...
- MATLAB常用的滤波函数比较:均值滤波 和 中值滤波
- JAVA计算机毕业设计大学生旅游拼团网站计算机(附源码、数据库)
- PHP云尚发卡,搭建个人发卡平台教程:云尚发卡平台搭建
- 黑群晖的驱动加载与卸载(以USB网卡驱动为例)
- 斑马打印机ZPL语言和EPL语言的区别是什么
- Unity OSA循环列表插件常用介绍
- 华为FreeBuds 5耳机声音变小怎么办?
- 实现两个分数的加减法编写一个C程序,
- 【Leetcode】444. Sequence Reconstruction
- 2011动作科幻《美少女特工队》BD中英双字1024/1280高清 下载
- 用c语言a的n次再取p的余数,近世代数期末考试题库