首页 > 数据库 >mysql递归查询

mysql递归查询

时间:2023-12-12 16:33:59浏览次数:31  
标签:name 递归 area pid t2 查询 mysql t1 id

 MySQL with Recursive的作用是基于一组初始数据,进行递归查询,返回符合条件的数据集。这种递归查询方式可以应用在很多场景下,比如对于树形结构、层级结构的数据处理,以及对数据进行分类汇总等。

MySQL with Recursive的使用限制?

MySQL with Recursive的使用限制主要在于查询语句的复杂性和效率。递归查询的复杂度随着层数的增加而增加,如果递归层数过多可能会导致查询效率低下甚至出现死循环的情况。因此,在使用MySQL with Recursive时需要注意数据量大小和递归层数。

语法:

WITH RECURSIVE cte_name (column_list) AS (
    SELECT initial_query_result
    UNION [ALL]
    SELECT recursive_query FROM cte_name
    WHERE condition
)
SELECT * FROM cte_name;

MySQL with Recursive语法详解

WITH RECURSIVE:表示要使用递归查询的方式处理数据。

cte_name:给这个临时的递归表取个名字,可以在初始查询和递归查询中引用。

column_list:表示cte_name查询表中包含的列名,列名之间用逗号分隔。

initial_query_result:表示初始的查询结果,应该与column_list中的列名对应。

UNION:表示将两个查询结果集进行联合,使用UNION ALL则表示保留重复数据。

recursive_query:表示递归查询语句,应当与column_list中的列名对应。

condition:表示递归查询的终止条件,需要使用cte_name中的列进行判断。

SELECT * FROM cte_name:表示最终返回的查询结果集,可以通过cte_name查询表中的列名进行指定。

使用:

查询父节点,含自己

1、表如下

2、sql如下:

WITH RECURSIVE recursion (id,  chi_short_name, pid, area_level) AS
(
  SELECT t1.id,  t1.chi_short_name,  t1.pid, t1.area_level
      from t_area_code t1
     where t1.id=110105
  UNION ALL
SELECT t2.id,t2.chi_short_name, t2.pid, t2.area_level
from t_area_code t2, recursion t3 WHERE t2.id=t3.pid
)
SELECT t.id,  t.chi_short_name, t.pid,t.area_level FROM recursion t;

注意:是t2.id=t3.pid,别弄反了

结果如下:

查询父节点,不含自己

WITH RECURSIVE recursion (id,  chi_short_name, pid, area_level) AS
(
  SELECT t1.id,  t1.chi_short_name,  t1.pid, t1.area_level
      from t_area_code t1
     where t1.id=110105
  UNION ALL
SELECT t2.id,t2.chi_short_name, t2.pid, t2.area_level
from t_area_code t2, recursion t3 WHERE t2.id=t3.pid
)
SELECT t.id,  t.chi_short_name, t.pid,t.area_level FROM recursion t where t.id!=110105;

结果:

查询子节点,含自己

WITH RECURSIVE recursion (id,  chi_short_name, pid, area_level) AS
(
  SELECT t1.id,  t1.chi_short_name,  t1.pid, t1.area_level
      from t_area_code t1
     where t1.id=110000
  UNION ALL
SELECT t2.id,t2.chi_short_name, t2.pid, t2.area_level
from t_area_code t2, recursion t3 WHERE t2.pid=t3.id
)
SELECT t.id,  t.chi_short_name, t.pid,t.area_level FROM recursion t 

结果如下:

 查询子节点,不含自己

WITH RECURSIVE recursion (id,  chi_short_name, pid, area_level) AS
(
  SELECT t1.id,  t1.chi_short_name,  t1.pid, t1.area_level
      from t_area_code t1
     where t1.id=110000
  UNION ALL
SELECT t2.id,t2.chi_short_name, t2.pid, t2.area_level
from t_area_code t2, recursion t3 WHERE t2.pid=t3.id
)
SELECT t.id,  t.chi_short_name, t.pid,t.area_level FROM recursion t where t.id!=110000;

结果:

 

标签:name,递归,area,pid,t2,查询,mysql,t1,id
From: https://www.cnblogs.com/zwh0910/p/17897200.html

相关文章

  • 从根上理解elasticsearch(lucene)查询原理(2)-lucene常见查询类型原理分析
    大家好,我是蓝胖子,在上一节我提到要想彻底搞懂elasticsearch慢查询的原因,必须搞懂lucene的查询原理,所以在上一节我分析了lucene查询的整体流程,除此以外,还必须要搞懂各种查询类型内部是如何工作,比如比较复杂的查询是将一个大查询分解成了小查询,然后通过对小查询的结果进行合并得到......
  • 递归函数复杂度分析
    在分析递归函数的时间复杂度时,我们需要考虑以下因素:每次递归调用的工作量。递归的深度(调用的次数)。每一层递归中的分支数。通常,我们使用递归树来分析递归算法的时间复杂度。具体的时间复杂度取决于递归算法的实现细节。我们来看一个简单的例子:计算斐波那契数列的递归实现。......
  • 递归思想
    递归思想递归的本质就是二字⇢套娃。什么被称之为是递归呢⇢在函数里面调用自身函数就被称之为是递归。套娃实际上就是在函数中再次调用同样的函数。以上便是递归的核心理念了,当你知道这个不知道这个核心理念有没有完整的刻在你的脑海当中去。在编程语言当中我们知道-一个函数是可以......
  • django orm 软删除联表查询 需要显示软删除条件
    比如课程学习required_ok=UserLesson.objects.values('uuid').distinct().filter(user_id=self.request.user_id,).filter(lesson__course__course_bx_org__org_id__in=org_ids,).filter(Q(lesson__course__......
  • centos6.8 使用yum安装 mysql5.7
    配置系统yum源这一步可选,如果yum源使用正常可跳过,由于centos6支持已于2020年停止,安全维护也只支持到2024年11月30日,所以很多原来可用的yum源也失效了,试了几个后找到以下可用的。备份旧配置mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup......
  • 全网最全,MySQL 增删改查高级命令硬核总结
    MySQL入门教程:全网最全,MySQL增删改查高级命令硬核总结原创 白鹿第一帅 白鹿第一帅 2023-12-0507:00 发表于四川文章目录前言一、连接到MySQL数据库1.1、连接到本机上的MySQL1.2、连接到远程主机上的MySQL二、退出MySQL命令三、修改MySQL密码3.1、先给roo......
  • mybatis-plus使用连表查询分页
    mybatis-plus在进行单表查询时确实很方便,但是一旦我们需要连表查询时,就不得不引用其他插件来进行操作。但是复杂的查询必然会造成我们的代码量往上涨。当然mybatis-plus也不会脱离mybatis原本的特性,比如xml文件来操作数据库。本篇文章记录一下使用mybatis-plus来进行连表查询分......
  • 将mysql的输出文本写回mysql
    1准备工作1.1环境准备操作系统:MicrosoftWindows10专业工作站版软件版本:Python3.9.6第三方包:pipinstallpandas2.1.0pipinstallpymysql1.1.0pipinstallsqlalchemy==2.0.23Get-WmiObject-ClassWin32_OperatingSystem|Select-Object-PropertyCaptionpython......
  • docker安装mysql
    1.下载mysql镜像#dockerpullmysql:8.0 2.检查下载的镜像#sudodockerimages 3.创建实例dockerrun-p3307:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql\-eMYSQL_ROO......
  • mysql审计之general_log
    一、概述1、配置参数#开启审计日志general_log=on#配置审计日志文件,mysql默认配置的是datadir目录下面,主机名.log的文件general_log_file=/data/mysql/general_log#配置日志输出到文件还是表,默认文件log_output=file2、优势mysql自带,不需要额外安装插件配置参数可以直接......