文档章节

mysql 递归函数

lcllol
 lcllol
发布于 2016/09/02 14:06
字数 653
阅读 71
收藏 0

业务描述:

选择部门时显示部门下面使用部门员工信息

 

部门数据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

DROP TABLE IF EXISTS `department`;

CREATE TABLE `department` (

  `Id` int(11) NOT NULL AUTO_INCREMENT,

  `Namevarchar(50) NOT NULL,

  `ParentId` int(11) NOT NULL DEFAULT '-1',

  PRIMARY KEY (`Id`)

) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of department

-- ----------------------------

INSERT INTO `department` VALUES ('38''XXX总公司''34');

INSERT INTO `department` VALUES ('39''服务器端开发组''38');

INSERT INTO `department` VALUES ('40''XXX分公司''-1');

INSERT INTO `department` VALUES ('44''财务部''40');

INSERT INTO `department` VALUES ('46''IOS开发组''38');

INSERT INTO `department` VALUES ('47''Android 开发组''38');

部门用户:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

DROP TABLE IF EXISTS `employee_basic`;

CREATE TABLE `employee_basic` (

  `Id` int(11) NOT NULL AUTO_INCREMENT,

  `Namevarchar(20) NOT NULL COMMENT '员工姓名',

  `EmpNo` varchar(20) NOT NULL DEFAULT '暂无' COMMENT '员工编号',

  `Email` varchar(50) NOT NULL COMMENT '员工邮箱',

  `Position` varchar(20) NOT NULL COMMENT '职位',

  `Sex` int(11) NOT NULL COMMENT '1-男,2-女',

  `Birthday` date NOT NULL COMMENT '员工生日',

  `EntryTime` date NOT NULL COMMENT '入职时间',

  `DepartmentId` int(11) NOT NULL,

  `School` varchar(30) DEFAULT '' COMMENT '毕业院校',

  `Phone` varchar(15) DEFAULT '' COMMENT '电话',

  `Address` varchar(30) DEFAULT '' COMMENT '地址',

  `EmergencyMan` varchar(20) DEFAULT NULL,

  `EmergencyPhone` varchar(15) DEFAULT NULL,

  PRIMARY KEY (`Id`)

) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of employee_basic

-- ----------------------------

INSERT INTO `employee_basic` VALUES ('18''罗AAA''暂无''yangtie@AAAA.com''CTO''1''2015-06-16''2015-06-18''39''暨南大学''1888888888''十五''罗AAA''111');

INSERT INTO `employee_basic` VALUES ('21''杨BBB''暂无''yangtie@AAAA.com''职员''1''2015-06-19''2015-05-13''39''中山大学''1888888888''111111111111111111111111111111''杨BBB''1888888888');

INSERT INTO `employee_basic` VALUES ('22''唐CCC''暂无''yangtie@AAAA.com''测试''1''2015-06-22''2015-06-23''44''中山大学''1888888888''前山前山前山前山前山前真''唐CCC''1888888888');

INSERT INTO `employee_basic` VALUES ('23''邓DDD''暂无''280591505@AAA.com''开发经理''1''2015-04-20''2015-05-01''46''桂林大学''1888888888''珠海市香洲青竹商务5205''邓DDD''1888888888');

INSERT INTO `employee_basic` VALUES ('24''陈FFF''暂无''280591505@AAA.com''开发''2''2015-06-20''2014-01-01''46''珠海大学''1888888888''珠海''陈FFF''1888888888');邓DDD

INSERT INTO `employee_basic` VALUES ('28''唐EEE''暂无''11@AAAA.com''11''1''2015-06-08''2015-06-01''47''111''11''111''唐EEE''111');

INSERT INTO `employee_basic` VALUES ('29''李GGG''暂无''88@AAAA.com''88''2''2015-07-01''2015-07-01''47''888''88''88''李GGG''88');

  

 

递归查询函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

ROP FUNCTION IF EXISTS queryChildrenIds;

CREATE FUNCTION `queryChildrenIds` (dId INT)

RETURNS VARCHAR(4000)

BEGIN

DECLARE sTemp VARCHAR(4000);

DECLARE sTempChd VARCHAR(4000);

 

SET sTemp = '$';

SET sTempChd = cast(dId as char);

 

WHILE sTempChd is not NULL DO

SET sTemp = CONCAT(sTemp,',',sTempChd);

SELECT group_concat(id) INTO sTempChd FROM department where FIND_IN_SET(ParentId,sTempChd)>0;

END WHILE;

return sTemp;

END;

测试查询结果:

1

<br>SELECT   queryChildrenIds(38)

1

SELECT e.* FROM employee_basic e INNER JOIN department d ON e.DepartmentId=d.Id where FIND_IN_SET(e.DepartmentId, queryChildrenIds(38));

本文转载自:http://www.cnblogs.com/lhj588/p/4614740.html

下一篇: mysql 行转列
lcllol
粉丝 0
博文 25
码字总数 4223
作品 0
南京
私信 提问
数据库递归查询:MySQL VS Sequelize

一、前言 最近在做团队的排期系统改版时涉及到数据库的递归查询问题,有一个需求数据表,表中的需求数据以parentId为外键定义数据的继承关系,需求之间的关系呈现树状关系。需求数据表如下:...

嘻嘻哈哈学习
04/16
0
0
【原创】PostgreSQL 对简单树的遍历

昨天我用MySQL来实现了ORACLE的递归语句CONNECT BY, 看起来稍复杂些。今天来看看POSTGRESQL如何实现ORACLE的CONNECT BY。 还是用昨天同样的表以及数据。POSTGRESQL自诩最像ORACLE的数据库,...

david_yeung
2014/11/05
0
0
Oracle和Mysql语法异同整理笔记

@[toc] 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造。 所以本博客主要介绍Oracle兼容mysql改...

smileNicky
02/16
0
0
Oracle to Mysql

这几天领导要求将应用从oracle搬到mysql,倒腾一阵子,数据本身除了blob和number有些问题外,其他都能正常迁移。倒是函数存储过程是个大难题,研究了一下,感觉都是要重写的样子,但是这样工...

厦门王五
2014/05/30
537
6
mysql递归层次查询

首先,需要了解两个MySQL的原生函数FINDINSET和group_concat: 使用范例: SELECT FINDINSET('a','a,b,c,d'); 运行结果:1; SELECT groupconcat(cdbh) FROM ssmenu; 运行结果:1,3,4,6,7,8......

jiyanle
2016/04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java8

package com.shi.lambda;import java.util.Arrays;import java.util.List;import org.junit.Test;import com.shi.model.Employee;/** * 初始化案例 * @author xiaosh......

小小小施爷
28分钟前
1
0
c# 动态编译代码

有时候做计算一些东西时候,算法一直变更,写在程序需要一直调整,因此算法写在cs文件,然后动态调用内部的方法去计算判断,只需变更cs文件即可。 添加Nuget,CodeDom,但是有两个添加都可以...

朝如青丝暮成雪
29分钟前
3
0
好程序员技术分享html5和JavaScript的区别

好程序员技术分享html5和JavaScript的区别,HTML5广义上讲是前端开发学科的代名词,包含HTML5、CSS3及JavaScript三个重要的部分,是运行在浏览器上应用的统称。如PC端网站、管理系统、手机网...

好程序员IT
31分钟前
2
0
tomcat 与 spring boot 设置虚拟路径

tomcat 设置虚拟路径 <Context path="/uploadDir" docBase="/data"/>path是请求访问的路径docBase是服务器存储文件的路径,Linux 根目录下 data spring boot 虚拟路径设置 registry.addRe......

kdy1994
34分钟前
1
0
var ,let ,const 的区别和共同点

一、let和var区别 1.关于变量提升,var能变量提升,let不能 // 关于var 如下所示console.log(a); //输出undefined,此时就是变量提升var a = 2; console.log(a); //2 //相当于下面...

MrBoyce
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部