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

如何在SQL中将3个表中的多行组合成1个字符串?,sql,sql-server,Sql,Sql Server,我有3个表:-MovieID、MovieName等-GenreID、GenreName等-MovieGenre映射表:MovieID和GenreID。 基本上,一部电影可以有多种类型。 我一直在努力寻找一个表的查询,该表列出了所有电影及其所有类型。我需要通过DataTable、SqlDataAdapter将数据加载到ASP.NETGridView。 前任: 1.  银河守护者  动作、冒险、科幻 2.  铁人        动作、冒险、幻想 我是SQL新手,搜索过类似的问

我有3个表:-MovieID、MovieName等-GenreID、GenreName等-MovieGenre映射表:MovieID和GenreID。 基本上,一部电影可以有多种类型。 我一直在努力寻找一个表的查询,该表列出了所有电影及其所有类型。我需要通过DataTable、SqlDataAdapter将数据加载到ASP.NETGridView。 前任: 1.  银河守护者  动作、冒险、科幻 2.  铁人        动作、冒险、幻想


我是SQL新手,搜索过类似的问题,找到了一些答案,但仍然不起作用

这里有一种方法。使用for xml path技巧将genrename连接为逗号分隔的值


这是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;

这些体裁不太可能有特殊的人物。因此,显式使用类型可能是不必要的。

请显示您自己的编码尝试,一些示例输入,即create table的一些行。。。。并插入,你得到的输出和不满意的地方。你可能还想坐飞机。
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;