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'
     
     
     

     
  • 相关阅读:
    关于百度地图API的地图坐标转换问题
    SQL Server函数大全
    30条SQL查询优化原则
    .net升级到4.0之后,出现;System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798
    Java回调函数的理解
    .NET 开源GIS项目
    微信公众平台开发入门教程
    GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
    可视化之lattice、recharts、ggplot资源汇总
    回归小知识
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1445778.html
Copyright © 2011-2022 走看看