如何在SQL中将3个表中的多行组合成1个字符串?

时间:2017-07-01 15:56:46

标签: sql sql-server

我有3张桌子:
- 电影(MovieID,MovieName等)
- 流派(GenreID,GenreName等)
- MovieGenre (映射表:MovieID& GenreID)。

基本上,电影可以有多种类型 我一直在努力寻找一个列出所有电影及其所有类型的表的查询。我需要这个通过DataTable,SqlDataAdapter将数据加载到ASP.Net GridView。

EX:
1银河守护者动作,冒险,科幻作品 2钢铁侠行动,冒险,幻想

我是SQL的新手并且已经搜索了类似的问题,找到了一些答案,但它仍然没有用。

2 个答案:

答案 0 :(得分:1)

这是SQL Server的痛苦。一种方法是每行放一个类型,但你明确地想要一行中的所有类型。

select m.*,
       stuff( (select ', ' + g.genreName
               from moviegenre mg join
                    genres
                    on mg.genreid = g.genreid
               where mg.movieid = m.movieid
               for xml path ('')
              ), 1, 2, ''
            ) as genres
from movies m;

genres不太可能有特殊字符。所以明确使用类型可能没有必要。

答案 1 :(得分:0)

这是一种方法。使用genrename技巧

for xml path('')连接到逗号分隔值
SELECT M.moviename, 
       Stuff(CS.genres, 1, 1, '') 
FROM   movie M 
       CROSS apply(SELECT ',' + genrename 
                   FROM   moviegenre MG 
                          INNER JOIN genre G 
                                  ON MG.genreid = G.genreid 
                   WHERE  MG.movieid = M.movieid 
                   FOR xml path('')) CS (genres)