2012-01-04 4 views
2

私はDBのエキスパートではありません。これは初心者向けの質問です。ムービーデータベースからデータを取得します

私は映画に関するデータを含むSQLiteデータベースを持っています。

メインテーブル(ムービー)が含ま:

  • movie_id(自動インクリメント、プライマリ)。
  • タイトル;
  • 年;
  • 他のフィールド。

そしてIは俳優テーブルを有する:

  • ACTOR_ID(自動インクリメントします)。
  • name;
  • 姓; (映画のテーブルに関連した)

    • movie_id;:次に

    私はキャストテーブルを持っています

  • actor_id(Actorテーブルに関連しています、例えばRobin Williams);
  • character_name( "Mrs Doubtfire"などの文字の名前)。私は、名前と俳優の姓と映画のリスト(私が開始するには、現在の映画のIDをしました、アプリケーション・レベルで)指定された映画のすべての文字を取得する必要があり、単一のクエリで

俳優が役割を担った場所(!=現在の映画):

Character_name | Actor   | Other movies where we've seen this actor 
Mrs Doubtfire | Robin Williams | Mork & Mindy, Dead Poets Society, ... 
Other name  | Other actor | Related movies,... 

これは可能ですか?どうやって?

答えて

2

試してみてください。

select max(c.character_name) character_name, 
     max(a.name) || ' ' || max(a.surname) actor, 
     group_concat(distinct m.title) other_movies 
from cast c 
join actors a on c.actor_id = a.actor_id 
left join cast omc on c.actor_id = omc.actor_id and c.movie_id <> omc.movie_id 
left join movies m on omc.movie_id = m.movie_id 
where c.movie_id = ? 
group by a.actor_id 
+0

これは動作するようですが、私の無知が、そのうちの一つ:-)質問がたくさんあるのです:なぜ「最大」? –

+1

これはactor_idでグループ化しているためです - ほとんどのSQLでは(MySQLは例外です)、グループ化されたselect句のフィールドは、集計されるか、group句に含まれなければなりません。この場合(名前がactor_idに機能的に依存しているため)、グループ句に名前を追加して残りのクエリに影響を与えることはできませんでしたが、必要なフィールドのみをグループ化する方が明確です名前に集計関数を使用する必要があります。 –

+0

マーク、私はたくさん勉強しましたが、あなたの質問はすばらしい出発点です;-) –

関連する問題