我的三个表是这么样的....
 书表             books (bk_id,bk_title,bk_price,bk_publishing)
 作者表           authors(au_id,au_name)
书和作者中间表    books_authors(ID,bk_id,au_id)
按下面的代码查询书的书名,价格,出版社,作者名字这些信息。因为有一本书多个作者的情况,如果查的话那就一条信息变成两条信息了。只选前几条给看一下.
  SELECT bk.bk_id,bk.bk_title,bk.bk_price,bk.bk_publishing,au.au_name
  FROM dbo.Books bk INNER JOIN books_authors ba  ON bk.bk_id=ba.bk_id
                    INNER JOIN dbo.authors au     ON ba.au_id = au.au_idbk_id   bk_title         bk_price    bk_publishing       au_name
1 数据库             50.00           铁道出版                曾伟
1 数据库             50.00           铁道出版                刘城
2 语文             40.00          人民出版社                人民
3 倚天屠龙记    43.00          人民出版社                金庸
3 倚天屠龙记   43.00          人民出版社                张无忌我想来想去也就应该字符串拼接了,不过不知道怎么拼了。 求代码....
虽然说别人说可以在前台的客户端比较容易弄,但求在SQL里怎么解决。 求代码....
 

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-11-05 15:57:58
    -- Version:
    --      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
    -- Dec 28 2012 20:23:12 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
    --
    ----------------------------------------------------------------
    --> 测试数据:[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([bk_id] int,[bk_title] varchar(10),[bk_price] numeric(4,2),[bk_publishing] varchar(10),[au_name] varchar(6))
    insert [huang]
    select 1,'数据库',50.00,'铁道出版','曾伟' union all
    select 1,'数据库',50.00,'铁道出版','刘城' union all
    select 2,'语文',40.00,'人民出版社','人民' union all
    select 3,'倚天屠龙记',43.00,'人民出版社','金庸' union all
    select 3,'倚天屠龙记',43.00,'人民出版社','张无忌'
    --------------开始查询--------------------------
    select a.[bk_id],a.[bk_title],a.[bk_price],a.[bk_publishing],
    stuff((select ','+au_name from [huang] b 
           where b.[bk_id]=a.[bk_id] and b.[bk_title]=a.[bk_title] AND a.[bk_price]=b.[bk_price] AND a.[bk_publishing]=b.[bk_publishing]
           for xml path('')),1,1,'') 'au_name'
    from [huang] a
    group by  a.[bk_id],a.[bk_title],a.[bk_price],a.[bk_publishing]
    ----------------结果----------------------------
    /* 
    bk_id       bk_title   bk_price                                bk_publishing au_name
    ----------- ---------- --------------------------------------- ------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1           数据库        50.00                                   铁道出版          曾伟,刘城
    2           语文         40.00                                   人民出版社         人民
    3           倚天屠龙记      43.00                                   人民出版社         金庸,张无忌
    */
      

  2.   

    直接执行这个看看是不是你想要的结果;
    WITH    huang
              AS ( SELECT   bk.bk_id ,
                            bk.bk_title ,
                            bk.bk_price ,
                            bk.bk_publishing ,
                            au.au_name
                   FROM     dbo.Books bk
                            INNER JOIN books_authors ba ON bk.bk_id = ba.bk_id
                            INNER JOIN dbo.authors au ON ba.au_id = au.au_id
                 )
        SELECT  a.[bk_id] ,
                a.[bk_title] ,
                a.[bk_price] ,
                a.[bk_publishing] ,
                STUFF(( SELECT  ',' + au_name
                        FROM    [huang] b
                        WHERE   b.[bk_id] = a.[bk_id]
                                AND b.[bk_title] = a.[bk_title]
                                AND a.[bk_price] = b.[bk_price]
                                AND a.[bk_publishing] = b.[bk_publishing]
                      FOR
                        XML PATH('')
                      ), 1, 1, '') 'au_name'
        FROM    [huang] a
        GROUP BY a.[bk_id] ,
                a.[bk_title] ,
                a.[bk_price] ,
                a.[bk_publishing]
      

  3.   

    YES,就是这样子的.想了老半天了...  我去看仔细看看太感谢你了...
      

  4.   

    是这样吗:SELECT distinct 
           bk.bk_id,bk.bk_title,
           bk.bk_price,bk.bk_publishing,
           stuff(
                  (
                   select ','+ a1.au_name from dbo.authors a1 
                   where a1.au_id = au.au_id
                   for xml path('')
                  ),
                  1,1,''
                ) as au_nae  
      FROM dbo.Books bk 
      INNER JOIN books_authors ba 
              ON bk.bk_id=ba.bk_id
      INNER JOIN dbo.authors au     
              ON ba.au_id = au.au_id