oracle可以使用connect by prior,进行父子查询,而mysql没有这种功能,需要自己写过程。
注意:pi_orgId 是条件值;pi_isQueryChild: 是查父还是查子,true 是查所有的儿子,false查最上层的父亲;pi_columNam是列明 ,pi_parentColumName 是父列名,pi_tableName 是表名。
代码示例如下:
DELIMITER $$
USE `ivbs`$$
DROP PROCEDURE IF EXISTS `sp_recursive_query`$$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_recursive_query`(IN pi_orgId VARCHAR(300),IN pi_isQueryChild BOOLEAN ,IN pi_columNam VARCHAR(50),IN pi_parentColumName VARCHAR(50) ,IN pi_tableName VARCHAR(50), OUT pi_out_str VARCHAR(1000))
BEGIN
DECLARE sTemp VARCHAR (4000) ;
SET sTemp = '$' ;
SET @sTempChd = CAST(pi_orgId AS CHAR) ;
WHILE
@sTempChd IS NOT NULL DO SET sTemp = CONCAT(sTemp, ',', @sTempChd ) ;
IF pi_isQueryChild THEN
-- 找儿子
SET @V_SQL := CONCAT('SELECT GROUP_CONCAT(',pi_columNam,') INTO @sTempChd FROM test_myt WHERE FIND_IN_SET(' , pi_parentColumName,',\'',@sTempChd,'\') > 0') ;
PREPARE stmt FROM @V_SQL;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
ELSE
-- 找父亲
SET @V_SQL := CONCAT('SELECT GROUP_CONCAT(',pi_parentColumName,') INTO @sTempChd FROM test_myt WHERE FIND_IN_SET(' , pi_columNam,',\'',@sTempChd,'\') > 0');
PREPARE stmt FROM @V_SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END WHILE ;
SET pi_out_str=sTemp;
END$$
DELIMITER ;
调用:
CALL sp_recursive_query('1',TRUE,'org_id','org_parent_id','table_name',@result);
SELECT @result;
结果:$,1,6,7,100,11,12 (通过1,找到所有的儿子,这是结果的格式,找父亲,第二个参数就传false,其他一样)
分享到:
相关推荐
在IT领域,尤其是在软件开发中,经常会遇到需要根据某个子节点查找其所有父节点的情况。这通常发生在数据结构和树形结构的操作中,比如在文件系统、DOM(文档对象模型)解析、数据库关系模型或者图算法中。这篇博客...
1、SELECT * FROM ( SELECT d.id, ( SELECT count( 1 ) FROM t_tree dd WHERE dd.parent_uuid = d.id ) AS count FROM t_tree d ) a ... t3.id NOT IN ( SELECT t1.id FROM t_tree t1, t_tree t2 WHERE ...
C# VS2012 86系统 mysql-5.5.27-win32 功能:利用动软代码生成器 从 数据库表或者视图中生成 的三层结构代码 实现 数据增删改查。 如果可以,请下载资源中 修改 的动软代码生成器 C#模板生成 1、由于之前使用 动...
在MySQL中,递归查询通常用于处理层次结构的数据,如组织结构、菜单系统或类别树等。当数据的层级关系无法预知或者可能无限深时,传统的JOIN操作可能无法满足需求,此时就需要自定义函数来实现递归查询。本文将详细...
主要记录描述了mysql数据中的多表查询问题,以及问题的解决办法
在MySQL中处理这类数据时,可能会遇到需要查询某节点的所有子节点或父节点的情况。由于MySQL不直接支持像Oracle那样使用`START WITH ... CONNECT BY`的递归查询语法,我们需要采取其他策略来实现类似的功能。 在...
在本文中,我们将深入探讨如何使用C++和MFC(Microsoft Foundation Classes)通过ADO(ActiveX Data Objects)连接到MYSQL数据库以实现基本的增、删、改、查操作。这是一套实用的技术方案,适用于那些希望在C++环境...
MySQL查询分析器是一种强大的工具,专门用于帮助数据库管理员和开发人员高效地管理和操作MySQL数据库。SQLYog Enterprise绿色版是其中的一款,它提供了一个直观且功能丰富的界面,使得执行SQL查询、管理数据库对象...
在本文中,我们将深入探讨如何使用Node.js、Express框架和MySQL数据库来构建一个功能完备的Web应用程序,包括数据的增删改查(CRUD)操作、分页功能以及图片的上传处理。首先,我们先来了解这三个核心组件。 **Node...
QT版本5.14,实现了连接MySQL进行了增删改查操作,和分页操作。解决了中文SQL提示成功但是执行失败问题。博客地址:https://blog.csdn.net/qq_37529913?spm=1001.2101.3001.5113
mysql查询一天,查询一周,查询一个月的数据.txt
mySQL查询分析器 j简单的JDS小程序,学习程序!
查立得php+MySql版说明书 可以快速用于MySql已有二维单表查询(比如已有其他业务系统数据), 或者有mysql操作数据导入经验(比如能将现有数据处理成为.csv文件MySql软件导入)人员使用。 使用前提 1. 这是网站源码,...
它使用`sParentTemp`存储当前遍历到的父节点ID,而`sParentList`积累所有父节点ID的字符串。开始时,`sParentTemp`被初始化为根节点ID。循环过程中,它查找那些ID存在于`sParentTemp`中的记录,将这些记录的`...
一、添加mysql依赖 mysql_async 是基于tokio2.0的异步mysql [dependencies] mysql_async = "0.22.2" tokio = "0.2.13" 二、设置database_url,创建连接池 DSN:mysql://root:root@127.0.0.1:3306/testdb?pool_min=...
综上所述,"简单的jsp+mysql实现数据库的增删改查"项目涵盖了Web开发的基本流程,包括用户交互、服务器处理、数据库操作以及权限控制。这样的实践有助于开发者理解Web应用的工作原理,同时为更复杂的系统开发打下...
SqlSugar操作mysql数据库增删改查代码 解压密码:打开文章链接: https://blog.csdn.net/txwtech/article/details/125603295?spm=1001.2014.3001.5501
在本文中,我们将深入探讨如何使用C#编程语言与本地MySQL数据库进行交互,实现基本的增删改查(CRUD)操作。对于初学者来说,这是掌握数据库编程的基础,也是许多应用程序开发的核心部分。我们将使用Visual Studio ...
MySQL则是一种关系型数据库管理系统(RDBMS),它以高效、稳定和易于管理著称。在这个系统中,MySQL用于存储学生的个人信息、课程信息以及成绩数据。数据库设计通常包括学生表、课程表和成绩表,三者通过主键和外键...