表A(用户表):
ID int         UserName   varchar(100)      SeeDocType  varchar(100)
1               员工1                       1-2-3
2               员工2                       2-3
3               员工3                       2表B:(文档表)
ID  int    title varchar(100)  SeeDocType varchar(100)
1           文档1              1-2-3
2           文档2              2-3
3           文档3              3表C:(查看的类型表)
ID(int)    typename varchar(100)    sortID  int
1            施工类                     1
2            设计类                     2
3            财务类                     3
当用户登陆后(即:已知表A员工SeeDocType),显示文档表中相应记录。
如:当员工2登陆后,其SeeDocType为"2-3",
显示表B记录为
1           文档1              1-2-3
2           文档2              2-3
3           文档3              3如:当员工3登陆后,其SeeDocType为"2",
显示表B记录为
1           文档1              1-2-3
2           文档2              2-3
请问用SQL语句怎么写显示表B:(文档表),已知表A(用户表):SeeDocType

解决方案 »

  1.   

    写个函数:
    create table A(ID int,UserName varchar(10),SeeDocType varchar(10)) 
    insert into A select 1,'员工1',rtrim('1-2-3') 
    insert into A select 2,'员工2',rtrim('2-3')
    insert into A select 3,'员工3',rtrim('2')create table B(ID int,title varchar(10),SeeDocType varchar(10)) 
    insert into B select 1,'文档1',rtrim('1-2-3') 
    insert into B select 2,'文档2',rtrim('2-3')
    insert into B select 3,'文档3',rtrim('3')create table C(ID int,typename varchar(10),sortID int) 
    insert into C select 1,'施工类',1 
    insert into C select 2,'设计类',2 
    insert into C select 3,'财务类',3 
    go
    create function f_compare(@StrA varchar(100),@StrB varchar(100))
    returns int
    as
    begin
      declare @StrC varchar(10)  select @StrA=@strA+'-',@StrB='-'+@StrB+'-'
      
      while charindex('-',@StrA)>0
      begin
        select @StrC='-'+left(@StrA,charindex('-',@StrA)),
               @StrA=stuff(@StrA,1,charindex('-',@StrA),'')
        
        if charindex(@StrC,@StrB)>0
          return 1
      end
      
      return 0
    end
    goselect
        B.*
    from
        A,B
    where
        dbo.f_compare(A.SeeDocType,B.SeeDocType)>0
        and
        A.ID=3/*
    ID          title      SeeDocType 
    ----------- ---------- ---------- 
    1           文档1        1-2-3
    2           文档2        2-3
    */
    GOdrop function f_compare
    drop table A,B,C
    GO
      

  2.   

    建议你增加子表来存SeeDocType,那样写出来的效率会比现在高得多。