我有3张桌子:
- 电影(MovieID,MovieName等)
- 流派(GenreID,GenreName等)
- MovieGenre (映射表:MovieID& GenreID)。
基本上,电影可以有多种类型
我一直在努力寻找一个列出所有电影及其所有类型的表的查询。我需要这个通过DataTable,SqlDataAdapter将数据加载到ASP.Net GridView。
EX:
1银河守护者动作,冒险,科幻作品
2钢铁侠行动,冒险,幻想
我是SQL的新手并且已经搜索了类似的问题,找到了一些答案,但它仍然没有用。
答案 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)