表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
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
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