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,其他一样)
分享到:
相关推荐
Mysql 时间模糊查询,不同场景的查询方式,根据条件查询
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 ...
代码 博文链接:https://blueskylan.iteye.com/blog/848423
C# VS2012 86系统 mysql-5.5.27-win32 功能:利用动软代码生成器 从 数据库表或者视图中生成 的三层结构代码 实现 数据增删改查。 如果可以,请下载资源中 修改 的动软代码生成器 C#模板生成 1、由于之前使用 动...
mysql对省市县的查询
主要记录描述了mysql数据中的多表查询问题,以及问题的解决办法
主要介绍了MySQL通过自定义函数实现递归查询父级ID或者子级ID,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
MySQL查询优化技术_索引
MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start with connect by prior 语法来实现递归查询的。 按照 prior 关键字在子节点端还是父节点端,以及是否包含当前查询的节点,...
快速掌握mysql的主要命令,速查表可以助你一日可掌握mysql的大概技术知识。
对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...
这里有一个mysql查询的小手册,不错分享给大家,不是原作者。请别用于商业,仅供学习使用
MySQL查询语句大全 各种关于数据库的语句 增删改查
navicat110_mysql_cs_x64.exe、是一款mysql数据库可视化操作工具,执行增删改查更方便。
MySQL常用查询状态命令
node.js+express+mysql实现增删改查+分页,以及图片上传操作
Mysql基本的CRUD命令速查手册,囊括了初学者学习JDBC的过程中常用的命令及简单的数据库权限操作命令,简单好用。
mysql查询一天,查询一周,查询一个月的数据.txt
mySQL查询分析器 j简单的JDS小程序,学习程序!
查立得php+MySql版说明书 可以快速用于MySql已有二维单表查询(比如已有其他业务系统数据), 或者有mysql操作数据导入经验(比如能将现有数据处理成为.csv文件MySql软件导入)人员使用。 使用前提 1. 这是网站源码,...