• 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'
     
     
     

     
  • 相关阅读:
    python学习笔记 day44 mysql练习题(三)
    python学习笔记 day44 mysql 练习题(二)
    python学习笔记 day44 mysql练习题(一)
    python学习笔记 day44 数据库三范式
    python学习笔记 day44 表与表之间的关系
    西北大学集训队选拔赛(重现赛)
    #Leetcode# 196. Delete Duplicate Emails
    #Leetcode# 596. Classes More Than 5 Students
    #Leetcode# 176. Second Highest Salary
    #Leetcode# 620. Not Boring Movies
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1445778.html
Copyright © 2020-2023  润新知