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'
     
     
     

     
  • 相关阅读:
    比较两个json数组是否有相同的选项
    使用gulp实现静态资源版本号替换
    Happy Halloween
    前端学习plan
    Python之函数式编程
    秋意浓
    2018给自己个plan,给自己一个小目标
    see goodbye with 2017
    杂记(一)
    The fruit in mid-summer
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1445778.html
Copyright © 2011-2022 走看看