首页 > 数据库 >使用SQL语句写递归查询

使用SQL语句写递归查询

时间:2023-07-12 20:36:26浏览次数:33  
标签:语句 depart 递归 hierarchy 查询 SQL employee id

要编写递归 SQL 语句,你可以使用通用表达式(Common Table Expressions,CTE)和递归查询功能。CTE 允许在 SQL 查询中定义临时的命名查询,并且可以在查询内部引用自身。

以下是一个示例来演示如何编写递归 SQL 语句:

假设有一个员工表 employees,其中包含列 idnamemanager_id,表示员工的唯一标识、姓名和上级经理的标识。

要获取某个员工及其所有下属的信息,可以使用递归查询来实现。

WITH RECURSIVE employee_hierarchy AS (
  SELECT id, name, manager_id
  FROM employees
  WHERE id = <employee_id> -- 指定初始员工的 ID

  UNION ALL

  SELECT e.id, e.name, e.manager_id
  FROM employees e
  JOIN employee_hierarchy eh ON e.manager_id = eh.id
)
SELECT *
FROM employee_hierarchy;

  

上述示例中,使用了一个名为 employee_hierarchy 的 CTE 命名查询。首先,初始化递归查询的起始条件,从 employees 表中选择指定的初始员工,并将其作为递归查询的基础。然后,递归部分通过连接 employees 表与前一级别的结果集(即 employee_hierarchy)来获取下属的信息,直到没有下属为止。

最后,通过在主查询中选择 employee_hierarchy 所有的结果,你将获得包括初始员工及其所有下属的完整员工信息。

请注意,递归查询可能涉及到表的自连接和循环引用,因此需要谨慎使用,并确保递归终止条件正确设置,以避免无限循环。

 

如下是根据自己业务,查询的向上递归

WITH RECURSIVE depart_hierarchy AS (
                SELECT id,  parent_id
                FROM sys_depart
                WHERE depart_manager=#{username}
                UNION ALL
                SELECT e.id, e.parent_id
                FROM sys_depart e
                         JOIN depart_hierarchy eh ON e.id = eh.parent_id
            )
            SELECT id
            FROM depart_hierarchy WHERE LENGTH(parent_id)>0

  

标签:语句,depart,递归,hierarchy,查询,SQL,employee,id
From: https://www.cnblogs.com/zhangliang88/p/17548742.html

相关文章

  • com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not al
    在做学成在线项目时,启动项目报错:com.mysql.cj.exceptions.UnableToConnectException:PublicKeyRetrievalisnotallowedatsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstr......
  • docker 安装 docker 并下载mysql redis镜像
    **步骤:1.Uninstalloldversions(卸载旧版本): sudoyumremovedocker\         docker-client\         docker-client-latest\         docker-common\         docker-latest\  ......
  • 递归和迭代的区别
    递归关键字是if-else深层的调用,一层一层进行执行函数的调用是这样的迭代关键字是forwhile是这样走的......
  • PostgreSQL(pg) /MYSQL数据库,使用递归查询(WITH RECURSIVE)功能来实现获取指定菜单ID的
      PostgreSQL/MYSQL数据库,使用递归查询(WITHRECURSIVE)功能来实现获取指定菜单ID的所有下级菜单数据。下方用例是假设菜单表menu的改成自己的表即可WITHRECURSIVEmenu_hierarchyAS(SELECTid,name,parent_idFROMmenuWHEREid=<指......
  • Linux(Centos)安装Mysql的步骤
    因为Mysql收费所以Centos7不能像原来那么丝滑的去安装了,之前很多可行的安装方式现在都需要换个姿势。本人环境是CentOS7,安装的MySQL版本是5.7.34,从卸载到安装全过程记录。一.卸载MySQL(没安装过的可直接跳过)​ ​最后查看一下还有没有MySQL依赖的包名和文件夹,按上面步骤全部......
  • MySQL条件查询
    前言从今天开始,健哥就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深,全面讲解数据库体系。非常适合零基础的小伙伴来学习。 前戏已做完,精彩即开始全文大约【1263】字,不说废话,只讲可以让你学到技......
  • pdo 连接sql server
    pdo链接sqlserver注意:需要根据PHP版本安装对应的依赖<?phprequire_once__DIR__.'/../config/_config.inc.php';require_once__DIR__.'/../api/src/autoload.php';require_once__DIR__.'/../api/v1/vendor/autoload.php';useShared\DB;......
  • IDEA中mysql无法自动补全解决办法
    1.前言本人在跟着b站视频学习时,发现无法如视频中显示的那样进行sql提示,上网查找了一些资料,进行了解决2.解决后的提示示例图1图23.解决方式3.1我的解决方式本人使用的IDEA是2021.2.3设置——语言和框架——SQL方言,修改全局SQL方言与项目SQL方言为MySQL。(最初是“无”)......
  • 基于C#连接Mysql,并进行增删改查操作
    记录一下今天的学习内容。前置条件(括号里是我用的):VisualStudio (2022)、Mysql(8.0.33CommunityServer)、NavicatPremium(16) 1.开发准备首先,打开VisualStudio,选择控制台应用并创建,框架应该影响不大,我用的.net6.0然后新建一个名为MysqlDbContext.cs的项。......
  • SSM - Mybatis - Example - SQL
     Teacher/Student表CREATETABLE`teacher`(`id`INTNOTNULL,`name`VARCHAR(30)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=INNODBDEFAULTCHARSET=UTF8MB4;INSERTINTOteacher(`id`,`name`)VALUES(1,'秦老师');CREATETABLE`student`(......