举个简单例子:

select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

1 7369 SMITH CLERK 7902 1980-12-17 1800 20

2 7499 ALLEN SALESMAN 7698 1981-2-20 1600 300 30

3 7521 WARD SALESMAN 7698 1981-2-22 1250 500 30

4 7566 JONES MANAGER 7839 1981-4-2 2975 20

5 7654 MARTIN SALESMAN 7698 1981-9-28 1250 1400 30

6 7698 BLAKE MANAGER 7839 1981-5-1 2850 30

7 7782 CLARK MANAGER 7839 1981-6-9 2450 10

8 7788 SCOTT ANALYST 7566 1987-4-19 3000 20

9 7839 KING PRESIDENT 1981-11-17 5000 10

10 7844 TURNER SALESMAN 7698 1981-9-8 1500 0 30

11 7876 ADAMS CLERK 7788 1987-5-23 1100 20

12 7900 JAMES CLERK 7698 1981-12-3 950 30

13 7902 FORD ANALYST 7566 1981-12-3 3000 20

14 7934 MILLER CLERK 7782 1982-1-23 1300 10

现在想查询某些人及其全部下属员工信息,oracle中可以这样查询:

select * from emp

connect by prior empno=mgr

start with empno in (7902,7788)

;

1 7788 SCOTT ANALYST 7566 1987-4-19 3000 20

2 7876 ADAMS CLERK 7788 1987-5-23 1100 20

3 7902 FORD ANALYST 7566 1981-12-3 3000 20

4 7369 SMITH CLERK 7902 1980-12-17 1800 20

在mysql中有什么号方法替换吗,本人在网上搜了比较多的是用函数:

CREATE FUNCTION getChildLst(rootId INT)

RETURNS varchar(1000) CHARSET utf8

BEGIN

DECLARE sTemp VARCHAR(1000);

DECLARE sTempChd VARCHAR(1000);

SET sTemp = “$”;

SET sTempChd =cast(rootId as CHAR);

WHILE sTempChd is not null DO

SET sTemp = concat(sTemp,”,”,sTempChd);

SELECT group_concat(empno) INTO sTempChd FROM emp where FIND_IN_SET(mgr,sTempChd)>0;

END WHILE;

RETURN substr(sTemp,3);

END

然后用

select * from emp

where FIND_IN_SET(empno,concat(getChildLst(7902),”,”,getChildLst(7788)))

;

本人在emp表empno字段建了索引,通过navicat for mysql 看上面的语句是全表扫描,没有走索引。

这种本人试过一些数据量比较大的表,查询就很慢。

讨教下大家能否有其他好的办法在mysql里实现上面的语句功能,另外还有个问题,就是这个函数一次只能返回一个父节点的全部子节点,假如本人要查询的参数是多个,例如一个子查询:

select * from emp

connect by prior empno=mgr

start with empno in ( select empno from emp where deptno=30)

;

该怎么实现这种呢?

解决方案

20

mysql没有这种函数,一般都是使用自定义函数编写,利用组合上层id,采用find_in_set函数实现层级查询

mysql 类似 oracle connect by_mysql实现层级查询,相似oracle里的connect by prior相关推荐

  1. 浅谈oracle树状结构层级查询

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只要精通数据库那么对于java开发你 ...

  2. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  3. oracle树状结构层级查询小结--connect by等之测试数据

    1.创建表 (dept_id VARCHAR2(32) not null,dept_name VARCHAR2(128),dept_code VARCHAR2(32),par_dept_id VARC ...

  4. oracle往据,指定日期查询数Oracle据库

    1,首先,介绍一下to_char函数 TO_CHAR 是把日期或数字转换为字符串,不能指定字符串长度. 使用TO_CHAR函数处理日期: TO_CHAR(number, '格式')  例如:TO_CH ...

  5. ArcGIS——数据库空间SQL(一、oracle中使用sql空间查询及st_astext等函数出错问题)

    一.引言 将shp文件导入oracle中就想着直接用sql进行普通查询和空间查询,这样直接通过webserver发布就可以不用arcgis server直接进行接口调用了,感觉这样比较接触底层些,所以 ...

  6. mysql start with connect by_MYSQL实现Oracle的Start with…Connect By递归树查询

    最近接触一个老项目,最初适配的数据库是oracle 后来迁移到mysql .这个迁移是由一个已经离职的新手做的.这个新手对于很多oracle特有的函数及存储过程都没有进行迁移.导致系统很多功能都BUG ...

  7. jpa oracle 传参int类型判空_SQL查询:Oracle、mysql、HQL查询语句差异

    SQL是结构化查询语言,执行Select(选择).Update(更新).Delete(删除)和Insert(插入)等数据任务. mysql是一个关系型数据库,用于存储和检索数据. 关系数据库是指基于关 ...

  8. Oracle开发者中级第7课(层级查询)实验

    概述 本实验参考DevGym中的实验指南. 创建环境 创建表,依赖于HR示例Schema中的employees表: create table employees asselect * from hr. ...

  9. MySql类似Oracle的dual虚拟表

    在mysql里也存在和oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用. 你可千万注意了: select * f ...

  10. MySQL 和 Oracle 大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

最新文章

  1. 一篇文读懂分布式系统本质:高吞吐、高可用、可扩展
  2. 分段埃尔米特插值Python实现并检查误差
  3. Java提取mssql备份文件的数据
  4. docker 数据库 mysql_在Docker中体验数据库之MySql
  5. Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags
  6. 记录一次奇葩的sleep(15)引起的Too many connections
  7. oracle sql between and 范围,oracle between and 边界有关问题
  8. ubuntu nginx 伪静态 设置
  9. iOS 录音及播放 音波图波形
  10. 巴别塔圣经_巴别塔简短简要指南
  11. android切图双数,UI切图与命名规范
  12. ncnn paramdictmodelbin
  13. php 分页查询,php实现分页查询的方法
  14. Android Serach框架使详解
  15. 祝福大家新年快乐,身体健康,工作顺利,万事如意!
  16. 医疗管理系统-检查组管理
  17. 【Java SE】数组的打印方式
  18. 关于α测试与β测试的区别
  19. proxmox ve 中文社区_基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置...
  20. Twitter将开通直播打赏功能 帮助美国网红赚钱

热门文章

  1. 为什么浏览器User-agent(浏览器类型)总是有Mozilla字样?
  2. RAID 的各种方案
  3. 点击按钮弹出Outlook(新建邮件状态)
  4. 《MySQL必知必会》学习笔记——第九章(正则表达式)
  5. mysql数据库自动添加编号_mysql数据库自动添加编号
  6. 喇叭正反相位测试音频_音频功放失真的四大要点及改善方法
  7. SpringBoot Security 整合 thymeleaf 模板自定义登录页面,按需提示错误信息
  8. mysql数据库封装类_基于mysqli封装的数据库类
  9. maven如何添加404页面
  10. python对比php开发web_django学习系列——python和php对比