• 【SQL】一个简单的查询所有层级(直到顶层)的sql语句


    我有如下一张表:

    table: employee
            id(员工编号)
            name(姓名)
            manager_id(直接领导的员工编号)

    数据如下:

    id name manager_id
    1 liuBei NULL
    2 guanYu 1
    3 zhangFei 1
    4 zhouCang 2
    5 guanPing 2
    6 peiYuanShao 4
    7 zhangXiu 6

    从这张表中,我们可以看出:

    liuBei 有两个直接下属 guanYu 和 zhangFei, 并且 liuBei 是最高领导。

    guanYu 有两个直接下属 zhouCang 和 guanPing

    zhangFei 没有直接下属

    zhouCang 有一个直接下属 peiYuanShao

    guanPing 没有直接下属

    peiYuanShao 有一个直接下属 zhangXiu

    zhangXiu 没有直接下属

    从这里我们知道,其中最长的这条关系就是 zhangXiu -> peiYuanShao -> zhouCang -> guanYu -> liuBei

    现在有一个问题,我们只知道一个员工的编号,需要查询出该员工的所有上级领导链,怎用用最少的代码实现呢?。 比如,我们只知道 zhangXiu 的员工编号是 7 ,怎么才能用最少的代码查询出这条关系链(zhangXiu -> peiYuanShao -> zhouCang -> guanYu -> liuBei)呢? 

    答案揭晓:

    with EmployeeTree  AS
    (
        SELECT * FROM employee WHERE ID = 7
        UNION ALL
        SELECT a.* FROM EmployeeTree , employee as a WHERE EmployeeTree.manager_id = a.id
    )
    SELECT * FROM EmployeeTree;

    就是这个SQL语句,就能查询出 zhangXiu 完整的领导关系链,sql语句中虽然没有直接写  for  循环,但是它是会循环查询的,直到查询的条件为   EmployeeTree.manager_id = a.id  的查询语句查不到数据为止。

    输出如下:

    id    name    manager_id
    7    zhangXiu    6
    6    peiYuanShao    4
    4    zhouCang    2
    2    guanYu    1
    1    liuBei    NULL

    上面的结果就是 zhangXiu -> peiYuanShao -> zouCang -> guanYu -> LiuBei,    神奇吧!

  • 相关阅读:
    ps cc 2018安装
    eclipse 快速添加 set , get 方法
    电脑设置以太网
    C# 获取web.config配置文件内容
    C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
    未能正确加载“Microsoft.VisualStudio.Implementation.EditorPackage”包
    C# 实现MD5加密
    mutex 简单介绍
    select @@IDENTITY
    C# vs2012创建报表
  • 原文地址:https://www.cnblogs.com/HDK2016/p/12423858.html
Copyright © 2020-2023  润新知