MySQL recursive 递归

news2024/11/17 17:38:29

 MySQL 从最内的select开始执行,但是同一个select clause可以在查询的结果上继续查询。

SELECT menu_id,parent_id,

(SELECT m1.parent_id FROM sys_menu AS m1 WHERE m1.menu_id=m.parent_id) 

FROM sys_menu AS m WHERE m.menu_id = 89

方案1.通过recursive递归

使用MySQL的CTE 方法,通过子节点向上查询

SELECT DISTINCT *  FROM (	
WITH recursive recur_menu_nodes_child AS (
		SELECT
			m.* 
		FROM
			sys_menu AS m,
			sys_user AS u,
			sys_role AS r,
			sys_role_menu AS rm 
		WHERE
			u.user_role = r.role_id 
			AND r.role_id = rm.role_id 
			AND m.menu_id = rm.menu_id 
			AND u.user_id = 1
			
			UNION ALL
			
			SELECT n.* FROM sys_menu AS n 
			JOIN recur_menu_nodes_child pn ON pn.parent_id = n.menu_id
)

SELECT * FROM recur_menu_nodes_child
) AS tab

 通过UNION DISTINCT简化后

WITH recursive recur_menu_nodes_child AS (
		SELECT
			m.* 
		FROM
			sys_menu AS m,
			sys_user AS u,
			sys_role AS r,
			sys_role_menu AS rm 
		WHERE
			u.user_role = r.role_id 
			AND r.role_id = rm.role_id 
			AND m.menu_id = rm.menu_id 
			AND u.user_id = 247 
			
			UNION DISTINCT
			
			SELECT n.* FROM sys_menu AS n 
			JOIN recur_menu_nodes_child pn ON pn.parent_id = n.menu_id
)SELECT * FROM recur_menu_nodes_child

方案2. 通过变量赋值

只适用于一个节点,而不是多个节点。

SELECT
	d3.* 
FROM
	(
	
	SELECT
		@r AS id,
		( SELECT @r := parent_id FROM sys_menu WHERE menu_id = @r ) AS parent_id 
	FROM
		( SELECT @r := 89 ) child,sys_menu hd
		
) d2
	
	INNER JOIN sys_menu d3 ON d2.id = d3.menu_id 
ORDER BY
	d3.menu_id

或者

更简单点

SELECT m.* FROM sys_menu AS m,(
SELECT 
        @r AS _id,
        (SELECT @r := parent_id FROM sys_menu WHERE menu_id = _id) AS parent_id
        FROM
        (SELECT @r := 89) vars, sys_menu AS h
        WHERE @r <> 0 
) AS tab WHERE m.menu_id = tab._id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 使用subplot绘制多个子图,一元拟合

实现效果&#xff1a; clc; clear;filename sri.xlsx; % 确认文件路径data readtable(filename); datavalue data{:,2:end}; datavalue datavalue;fig figure(Position, [0, 0, 1500, 900]); indexString ["(a)","(b)","(c)","(d)&qu…

科技感十足特效源码

源码介绍 科技感十足特效源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 源码截图 源码下载 科技感十足特效源码

十大常见B端管理系统,经常用,未必能叫上名字。

常见的B端管理系统有以下几种&#xff1a; 客户关系管理系统&#xff08;CRM&#xff09;&#xff1a; CRM系统帮助企业管理与客户相关的信息&#xff0c;包括客户联系信息、销售机会、市场活动等。它提供了客户数据整合、销售流程管理、客户沟通跟进等功能&#xff0c;帮助企…

【人工智能基础】逻辑回归实验分析

实验环境&#xff1a;anaconda、jutpyter Notebook 实验使用的库&#xff1a;numpy、matplotlib 一、逻辑回归 逻辑回归是一个常用于二分类的分类模型。本质是&#xff1a;假设数据服从这个分布&#xff0c;然后使用极大似然估计做参数的估计。 二、实验准备 引入库、预设值…

【三】Spring Cloud Ribbon 实战

Spring Cloud Ribbon 实战 概述 一直在构思写一个spring cloud系列文章&#xff0c;一方面是对自己实践经验进行一次完整的梳理&#xff0c;另一方面也是希望能够给初学者一些借鉴&#xff0c;让初学者少走些弯路&#xff0c;看到本系列博客就能够很好的把微服务系列组件用好。…

字符函数·字符串函数·C语言内存函数—使用和模拟实现

字符函数字符串函数C语言内存函数 1.字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strcmp的使用和模拟实现7.strncpy的模拟和实现8.strncat的实现和模拟实现9.strncmp函数使用10.strstr的使用和模拟实现11.strtok函…

【python技术】akshare爬取A股最新业绩预告保存进excel的简单示例

最近A股上市公司陆续在出年报和一季度报了&#xff0c; 心里寻思着要不用python把这些数据爬取下来分析下&#xff0c;说干就干。 数据来源网站东方财富&#xff1a;https://data.eastmoney.com/bbsj/ 我这个人比较懒&#xff0c;直接用akshare封装的方法来搞定 之前用aksha…

嵌入式单总线详解

单总线介绍 单总线&#xff0c;就像是电子世界里的“超级水管工”&#xff0c;它以一根线的简洁&#xff0c;完成了数据传输、设备供电乃至设备识别的多重任务&#xff0c;展现了极简主义的智慧与效率。想象一下&#xff0c;你住在一个高科技社区&#xff0c;所有的家电——冰…

【while循环】

目录 什么是循环 while语句的执行过程 编程求1*2*3*...*n 所有不超过1000的数中含有数字3的自然数 求数 求数II 编程求1平方2平方...n平方 什么是循环 循环就是重复做同样的事儿使用while语句循环输出1到100 int i 1; while( i < 100 ){cout <<…

C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…

opencv_17_翻转与旋转

一、图像翻转 1&#xff09;void flip_test(Mat& image); 2&#xff09;void ColorInvert::flip_test(Mat& image) { Mat dst; //flip(image, dst, 0); //上下翻转 flip(image, dst, 1); //左右翻转 // flip(image, dst, -1); //180度翻转 imsho…

软件测试笔记_习题_面经

软件测试------按测试阶段划分有几个阶段? 单元测试、集成测试、系统测试、验收测试 软件测试------按是否查看源代码划分有几种测试方法? 黑盒、白盒、灰盒 软件测试------按是否运行划分有几种测试方法? 静态测试、动态测试 软件测试------按是否自动化划分有几种测试方…

chrome 查看版本安装路径、cmd命令行启动浏览器

chrome 查看版本安装路径 浏览器输入 chrome://version/cmd命令行启动浏览器 "C:\Program Files\Google\Chrome\Application\chrome.exe" www.baidu.com

神经网络的反向传播

梯度下降算法 &#x1f525;我们来看一下神经网络中的梯度下降算法&#x1f525; 梯度下降法是一种优化算法&#xff0c;用于寻找目标函数的最小值。梯度是一个向量&#xff0c;表示某一函数在该点处的方向导数沿着该方向取得最大值&#xff0c;即函数在该点处变化最快的方向…

Sublime Vim模式配置:q关闭当前标签页

在Sublime安装目录下的->Packages文件夹下新建User文件夹创建文件Vintage.sublime-commands 路径为Sublime安装目录->Packages->User->Vintage.sublime-commands文件内容如下[{"caption": ":w - Save","command": "save"}…

【Model 3芯片】双层PCB设计,打造高性价比HMI控制器

产品高性能和可靠性的需求日益增长&#xff0c;特别是在工业应用领域中&#xff0c;这些要求更是严苛。为了满足这些不断升级的需求&#xff0c;启明智显推出了全新的Model 3芯片。这款芯片以其卓越的性能和强大的功能&#xff0c;被设计用作人机界面&#xff08;HMI&#xff0…

RKNN Toolkit2 工具的使用

RKNN Toolkit2 是由瑞芯微电子 (Rockchip) 开发的一套用于深度学习模型优化和推理的工具。它主要面向在瑞芯微SoC上进行AI应用开发&#xff0c;但也可以用于PC平台进行模型的转换、量化、推理等操作。它支持将多种深度学习框架的模型&#xff08;如Caffe, TensorFlow, PyTorch等…

一键呼叫,服务到家——同城跑腿小程序引领新生活方式

在忙碌的现代生活中&#xff0c;时间变得尤为珍贵。我们常常被琐事所困扰&#xff0c;无法尽情享受生活的美好。然而&#xff0c;同城跑腿小程序的出现&#xff0c;以其一键呼叫、服务到家的便捷特性&#xff0c;为我们打开了一扇通往新生活方式的大门。 同城跑腿小程序&#x…

如何解决pycharm创建项目报错 Error occurred when installing package ‘requests‘. Details.

&#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;‘requests’ &#x1f6e0;️ 文章目录 &#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;requests &#x1f6e0;️摘要引言正文&#x1f4d8; **问题分析**&#x1f680; **更换Python版本…

《软件设计师教程:数据库系统基础知识大总结》

​ 个人主页&#xff1a;李仙桎 &#x1f525; 个人专栏: 《软件设计师》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ​ ⛺️前言&#xff1a;各位铁汁们好啊&#xff01;&#xff01;&#xff01;今天继续正式学习中级软件设计师考试相关的内容&#xff0c;后续不断更新…