zoukankan      html  css  js  c++  java
  • B+树查询上下级(sql实现)

         B+树查询上下级(sql实现)
     
     
    use pubs
     
    --drop table employee
     
    create table employee
    (
     empId char(32) primary key,
     empName varchar(20),
     higherUpId char(32)
    )
     
    insert into employee values('0001','aa',null)
     
    insert into employee values('0002','bb','0001')
    insert into employee values('0003','cc','0001')
     
    insert into employee values('0004','dd','0002')
    insert into employee values('0005','ee','0002')
     
    insert into employee values('0006','ff','0003')
    insert into employee values('0007','gg','0003')
     
    insert into employee values('0008','hh','0004')
    insert into employee values('0009','ii','0004')
     
    insert into employee values('0010','jj','0007')
    insert into employee values('0011','kk','0007')
     
     
     
    --查下级和间接下级
    create proc proc_treeDownQuery
     @id varchar(20)
    as
     declare @temp varchar(2000)
     declare @tempCount nvarchar(2000)
     declare @sql varchar(5000)
     declare @count int
     
     set @sql = 'select empId from employee where higherUpId = ' + @id
     set @temp = 'select empId from employee where higherUpId = '+ @id
     
     while (1=1)
     begin
      set @tempCount = 'select @count=count(*) from employee where higherUpId in (' + @temp + ')'
      exec sp_executesql @tempCount,N'@count int output',@count output
     
      if (@count=0)
       begin
        break
       end
      else
       begin
        set @temp = 'select empId from employee where higherUpId in (' + @temp + ')'
        set @sql = @sql +  ' union ' + @temp
       end
      
     end
     
     exec(@sql)
     
     
    go
     
    exec proc_treeDownQuery '0001'
     

    --drop proc proc_treeUpQuery
     

    --查上级和间接上级
    create proc proc_treeUpQuery
     @id varchar(20)
    as
     declare @count int
     declare @sql varchar(5000)
     declare @temp varchar(2000)
     declare @tempCount nvarchar(2000)
     
     set @sql = 'select higherUpId from employee where empId = ' + @id
     set @temp = 'select higherUpId from employee where empId = ' + @id
     
     while (1=1)
     begin 
      set @tempCount = 'select @count=count(higherUpId) from employee where empId in (' + @temp + ')'
      exec sp_executesql @tempCount,N'@count int output',@count output
     
      if (@count=0)
       begin
        break
       end
      else
       begin
        set @temp = 'select higherUpId from employee where empId in (' + @temp + ')'
        set @sql = @sql + ' union ' + @temp
       end
     end
     
     exec(@sql)
    go
     

    exec proc_treeUpQuery '0009'
     
     
     

     
  • 相关阅读:
    4种常见的缓存问题及解决方案详解
    如果你不了解Java的JVM,那真的很难进BAT一线大厂!
    终于有人把分布式事务说清楚了!
    这3个并发编程的核心,你一定要知道!
    Java垃圾回收机制你还不明白?一线大厂面试必问的!
    几种置换算法
    [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some
    redis集群添加删除节点
    redis集群安装部署
    在Ubuntu下永久修改主机名
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1445778.html
Copyright © 2011-2022 走看看