含义:
查询字段(strList)中包含的结果,返回结果null或记录。
- str : 要查询的字符串.
- strList : 字段名,参数以“,”分隔,如(1,2,6,8)
需求: 查出当前用户下面所有的子用户信息. ( 传递父类id )分析: 方法一: 使用Java程序进行遍历查询. ( 一条一条查询, 执行效率低 ) 方法二: &nb...
mysql实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set()】函数和【group_concat()】函数实现递归查询。
本教程操作环境:windows7系统、mysql8.0.22版,该方法适用于所有品牌电脑。
免费学习推荐:mysql教程(视频)
mysql实现递归查询的方法:
1、创建表
DROP TABLE IF EXISTS `t_areainfo`;
CREATE TABLE `t_areainfo` (
`id` i.
还是上次那一个表,要加上条件,推荐人被推荐人都得符合条件。
这个sql写了3小时。要求一条sql查询出所有符合条件的id及其对应的推荐id,推荐id也有脏数据得去过滤。感到一个表查了查去,绕晕了。
大家对此sql没有啥好优化的建议。我提议废了这个接口。
改成多次遍历去查,用代码实现就简单多了。于是废了。
CREATE TABLE `wq_areainfo` (
`id` int(11) NOT null AUTO_INCREMENT,
`level` int(11) DEFAULT 0 ,
`name` varchar(255) DEFAULT '0',
`pa...
id int(11) NOT null AUTO_INCREMENT,
level int(11) DEFAULT 0 ,
name varchar(255) DEFAULT ‘0’,
parentId int(11) DEFAULT 0,
status int(11) DEFAULT 0,
PRIMARY KEY (id)
最近在做的业务场景涉及到了数据库的递归查询。我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单。
但是,我记得 MySQL 是没有递归查询功能的,那 MySQL 中应该怎么实现呢?
于是,就有了这篇文章。
文章主要知识点:
Oracle 递归查询, start with connect by prior 用法
find_in_set 函数
concat,concat_ws,group_concat 函数
MySQL 自定义函数
手动实现 MySQL 递
MySQL支持递归查询所有子级的功能,可以通过使用WITH RECURSIVE关键字来完成。具体的做法如下:
使用WITH RECURSIVE关键字定义递归查询语句的开始部分,并指定初始条件,如起始节点的ID;
在递归查询语句的SELECT子句中,列出需要查询的字段,并将递归所需的表连接在一起;
在FROM子句中使用子查询来连接两个相同表,同时在其中使用递归查询语句来找到所有的子节点;
在WHERE子句中设置递归结束的条件,如判断是否到达了叶子节点,从而结束递归循环;
最后,在主查询语句中将递归查询语句作为子查询并指定需要输出的字段。
例如,假设有一个表格名为“tree”,用于记录数据的层次结构,其中有两个字段——"id"和"parent_id",分别表示该节点的ID和它的父节点的ID。为递归查询获取所有子级,可以如下实现:
WITH RECURSIVE cte AS (
SELECT id, parent_id
FROM tree
WHERE id = 1 --设置开始节点的ID
UNION ALL
SELECT t.id, t.parent_id
FROM tree t
JOIN cte ON cte.id = t.parent_id --连接表格,并使用递归查询语句来查找所有的子节点
WHERE t.id != cte.id --设置递归结束的条件,这里是避免重复查询
SELECT id, parent_id --输出需要查询的字段
FROM cte;
通过以上语句,即可查询到"tree"表格中所有以ID为1的节点为根节点的子级节点。如果想要查询"tree"表格中所有节点的子级节点,只需将初始条件改为NULL。
总之,MySQL支持递归查询所有子级的功能,通过使用WITH RECURSIVE关键字,将递归查询语句嵌套在SELECT语句中即可实现。