第一个表: ID   Name
           1    wjy第二个表 : ID   Menu           1     第一个
           2     第二个
           3     第三个
第三个关系表: ID  OneID   TwoID
              1  1       1
              2  1       2
              3  1       3
我现有个列表只要读一行 1 wjy怎么与它有关系的也读到这一行上的(比如第二个表通过第三个表跟它有关系的!把有关系的那三个也写到这一行上的
)1  wjy  ...
..这个就是跟它有关系的那三个要怎么写啊!

解决方案 »

  1.   

    比如多出一个列出来;把跟它有关系的写进去第一列  第二列  第三列
    1       wjy   1,2,3
      

  2.   

    请把)1 wjy ...
    ..这个就是跟它有关系的那三个要怎么写啊!中,
    1 wjy ...
    后面的三个点补充完整,不然实在不能理解你究竟是什么样的连接.
      

  3.   

    /****************************************************************************************************************************************************** 
    合并分拆表数据 整理人:中国风(Roy) 日期:2008.06.06 
    ******************************************************************************************************************************************************/ --> --> (Roy)生成測試數據 if not object_id('Tab') is null 
        drop table Tab 
    Go 
    Create table Tab([Col1] int,[Col2] nvarchar(1)) 
    Insert Tab 
    select 1,N'a' union all 
    select 1,N'b' union all 
    select 1,N'c' union all 
    select 2,N'd' union all 
    select 2,N'e' union all 
    select 3,N'f' 
    Go 合并表: SQL2000用函数: go 
    if object_id('F_Str') is not null 
        drop function F_Str 
    go 
    create function F_Str(@Col1 int) 
    returns nvarchar(100) 
    as 
    begin 
        declare @S nvarchar(100) 
        select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1 
        return @S 
    end 
    go 
    Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab go SQL2005用XML: 方法1: select 
        a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'') 
    from 
        (select distinct COl1 from Tab) a 
    Cross apply 
        (select COl2=(select N','+Col2 from Tab where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b 方法2: select 
        a.Col1,COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44)) 
    from 
        (select distinct COl1 from Tab) a 
    cross apply 
        (select Col2=(select COl2 from Tab  where COl1=a.COl1 FOR XML AUTO, TYPE) 
                    .query(' <Tab> 
                    {for $i in /Tab[position() <last()]/@COl2 return concat(string($i),",")} 
                    {concat("",string(/Tab[last()]/@COl2))} 
                    </Tab>') 
                    )b SQL05用CTE: ;with roy as(select Col1,Col2,row=row_number()over(partition by COl1 order by COl1) from Tab) 
    ,Roy2 as 
    (select COl1,cast(COl2 as nvarchar(100))COl2,row from Roy where row=1 
    union all 
    select a.Col1,cast(b.COl2+','+a.COl2 as nvarchar(100)),a.row from Roy a join Roy2 b on a.COl1=b.COl1 and a.row=b.row+1) 
    select Col1,Col2 from Roy2 a where row=(select max(row) from roy where Col1=a.COl1) order by Col1 option (MAXRECURSION 0) 
    生成结果: 
    /* 
    Col1        COl2 
    ----------- ------------ 
    1          a,b,c 
    2          d,e 
    3          f (3 行受影响) 
    */ 
      

  4.   

    比如多出一个列出来;把跟它有关系的写进去第一列 第二列 第三列(这个第三列是第二个表的它是根据第三个表显示出来的)
    1 wjy 1,2,3
      

  5.   

    这样?
    create table t1(ID int,Name varchar(10))
    insert into t1 select 1,'wjy'
    create table t2(ID int,Menu varchar(10))
    insert into t2 select 1,'第一个'
    insert into t2 select 2,'第二个'
    insert into t2 select 3,'第三个'
    create table t3(ID int,OneID int,TwoID int)
    insert into t3 select 1,1,1
    insert into t3 select 2,1,2
    insert into t3 select 3,1,3
    go
    select a.id 第一列,a.name 第二列,stuff((select ','+ltrim(TwoID) from t3 where OneID=a.id for xml path('')),1,1,'')第三列
     from t1 a group by a.id,a.name
    /*
    第一列         第二列        第三列
    ----------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1           wjy        1,2,3(1 行受影响)*/
    go
    drop table t1,t2,t3
      

  6.   

    select a.id 第一列,a.name 第二列,
    第三列=stuff((select ','+ltrim(TwoID) from t3 where OneID=a.id for xml path('')),1,1,'')
     from t1 a group by a.id,a.name
      

  7.   

    select a.id 第一列,a.name 第二列,
    第三列=stuff((select ','+ltrim(TwoID) from t3 where OneID=a.id for xml path('')),1,1,'')
     from t1 a group by a.id,a.name
    像这样的语句是写在哪的?我数据库不是不好的!
      

  8.   

    我是用NET开发的!不会是直接用上面那SQL语句去返回表吧
      

  9.   

    sql2005及以上版本使用xml,2000用可以函数。
      

  10.   


    把这段语句
    select a.id 第一列,a.name 第二列,stuff((select ','+ltrim(TwoID) from t3 where OneID=a.id for xml path('')),1,1,'')第三列
     from t1 a group by a.id,a.name当成基本查询语句让连接对象去exec,返回记录集对象就能显示了.可以事先在SQL 2005 查询窗口运行一下,你就能看到结果了.