2017-07-01 5 views
0

は、私は3つのテーブルがあります: - 作品(などMOVIEID、MOVIENAME、)
から
ジャンル(GenreID、GenreNameなど)
- MovieGenre(マッピングテーブルは:& GenreIDをMOVIEID)。

基本的に、ムービーは複数のジャンルを持つことができます。
私は、すべての映画とその全ジャンルをリストにしたテーブルのクエリを見つけるのに苦労してきました。 DataTable、SqlDataAdapter経由でASP.Net GridViewにデータをロードするには、これが必要です。

EX:
1 銀河の守護者 アクション、アドベンチャー、サイエンスフィクション
2 アイアンマン                 アクション、アドベンチャー、ファンタジーSQLで3つのテーブルの複数の行を1つの文字列に結合するにはどうすればよいですか?

私はSQLに新たなんだと同様の質問で検索しましたが、いくつかの答えを見つけたが、それはまだ動作しませんでした。

+0

独自のコーディングの試行、いくつかのサンプル入力( 'create table ....'と 'into into ... 'のいくつかの行)、あなたが得る出力とそれについて満足していないものを表示してください。 [ツアー]をしたいこともあります。 – Yunnosch

答えて

0

これを行う方法の1つです。これは、SQL Serverの痛みである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) 
1

を使用して、カンマ区切りにgenrenameを連結します。 1つの方法は、1つの行に1つのジャンルを入れることですが、明示的にすべてを1つの行に入れたいとします。

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には特殊文字は含まれません。明示的に型を使用する必要はないでしょう。

関連する問題