A表: ID Name
1 张三
2 李四
3 王五B表:ID AID(用于保存所选A表ID)
1 1,2,1
2 1,1,3现希望通过SQL语句查询B表得出如下结果:
ID AID AName
1 1,2,1 张三,李四,张三
2 1,1,3 张三,张三,王五
1 张三
2 李四
3 王五B表:ID AID(用于保存所选A表ID)
1 1,2,1
2 1,1,3现希望通过SQL语句查询B表得出如下结果:
ID AID AName
1 1,2,1 张三,李四,张三
2 1,1,3 张三,张三,王五
多对多关系可以建一个关系表。B表
ID AID
1 1
1 2
1 1
2 1
2 1
2 3
多对多关系可以建一个关系表。 B表
ID AID
1 1
1 2
1 1
2 1
2 1
2 3恩。。
肯定能实现!
create table A表(ID int, Name nvarchar(20))
insert into A表
select 1 ,'张三' union all
select 2 ,'李四' union all
select 3 ,'王五' create table B表(ID int, AID varchar(50))
insert into B表
select 1 ,'1,2,1'union all
select 2 ,'1,1,3'create function merge(@inAID varchar(50))
returns nvarchar(200)
as
begin
declare @s nvarchar(200)
set @s=''
declare @id varchar(8)
declare @AID varchar(51)
set @AID = @inAID+','
while patindex('%,%',@AID)<>0
begin
set @id = substring(@AID,0,patindex('%,%',@AID))
select @s=@s+name+','
from A表 where id=@id
set @AID = substring(@AID,patindex('%,%',@AID)+1,len(@AID))
end
return stuff(@s,len(@s),1,'')
end
select ID,AID,dbo.merge(AID) from B表
/*
ID AID
----------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1,2,1 张三,李四,张三
2 1,1,3 张三,张三,王五(2 行受影响)
*/
if(charindex('/',@id)>0)
beginend