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.   

    这个设计第一范式就不符合,
    多对多关系可以建一个关系表。B表
    ID AID
    1   1
    1   2
    1   1
    2   1
    2   1
    2   3
      

  2.   

    这个设计第一范式就不符合, 
    多对多关系可以建一个关系表。 B表 
    ID AID 
    1  1 
    1  2 
    1  1 
    2  1 
    2  1 
    2  3恩。。
      

  3.   

    select A表.Name,B表.ID from A表,B表 where A表.Name=B表.ID
      

  4.   

    使用游标加这个,charindex(',',AID)>0 
    肯定能实现!
      
      

  5.   


    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 行受影响)
    */
      

  6.   

    通过函数分割AID,查询值再返回
    if(charindex('/',@id)>0)
    beginend