プロが教えるわが家の防犯対策術!

映画テーブル
id、タイトル、   画像、 制作年、 あらすじ
1 あいうえお        2007   これは・・・

批評テーブル
タイトルid、 感想、   点数(10点満点)
   1   とても・・・     8

ジャンルテーブル(このテーブルには最初から全ジャンルが入っています)
タイトルd、 ジャンル1、  ジャンル2
   1   アクション   サスペンス

人物テーブル(名前が追加されていき、重複のないリストになる)
id、  名前
1   ブラピ
2   レオナルド
3   ジョージ
4   ミラ

映画関係者テーブル
タイトルid、
  1
監督id(人物テーブルから該当するidを取得)、
  3
キャスト1id(同じく人物テーブルから該当するidを取得)、
  1
キャスト2id(同じく人物テーブルから該当するidを取得)、
  2
キャスト3id(同じく人物テーブルから該当するidを取得)、
  4

というようなテーブルを5個作成しました。

select時に取り出したいデータは、
タイトル(あいうえお)、画像、制作年(2007)、あらすじ(これは・・・)、感想(とても)、点数(8)、
ジャンル1(アクション)、ジャンル2(サスペンス)、監督名(ジョージ)、キャスト1名(ブラピ)、
キャスト2名(レオナルド)、キャスト3名(ミラ)
の12個です。

しかし、ネットや専門書で調べても3個までのテーブル結合しか掲載されおらず、5個のテーブル結合の方法が分かりません。
苦戦しているのは、人物テーブルと映画関係者テーブルを結合しての監督等の名前だけをとりだす方法です。ここだけ、別途で選択したほうがいいのでしょうか?
一度の処理で、全てのデータを取り出すのが理想なのですが、やはり、このテーブル構成自体に無理があるのでしょうか?
土曜、日曜と調べたのですが、ヒントすら探し出すことができませんでした。
よろしければ、テーブル結合の仕方を教えてください。
お願いします。

A 回答 (3件)

>苦戦しているのは、人物テーブルと映画関係者テーブルを結合しての監督等の名前だけをとりだす方法です



とりあえずここについてのみ回答します。


SELECT
 A.名前 AS 監督名称
 ,B.名前 AS キャスト1名称
 ,C.名前 AS キャスト2名称
 ,D.名前 AS キャスト3名称
FROM
 人物テーブル AS 人物
  INNER JOIN 映画関係者テーブル AS A ON 人物.id = A.監督id
  INNER JOIN 映画関係者テーブル AS B ON 人物.id = B.キャスト1id
  INNER JOIN 映画関係者テーブル AS C ON 人物.id = C.キャスト2id
  INNER JOIN 映画関係者テーブル AS D ON 人物.id = D.キャスト3id


となります。

もっとスマートなやり方もありますが、サブクエリが使う上に初心者だと取っつき難い方法になるので、ここではふれません。
    • good
    • 1
この回答へのお礼

同じ質問なのに、2回もお答えいただきありがとうございました。
おかげさまで、望み通りのサイトが作れそうです。
本当にありがとうございました。

お礼日時:2011/06/14 18:27

サブクエリのほうが視覚的にわかりやすいと思います。



監督名をとりだす。

SELECT
E.タイトルid
J.名前 AS 監督名
FROM
映画関係者テーブル E
INNER JOIN
人物テーブル J
ON
E.監督id = J.id

これを監督名テーブルとすると

SELECT
E.タイトル
--略---
K.監督名
FROM
映画テーブル E
INNER JOIN
監督テーブル K
ON
E.id = K.タイトルid

監督テーブルをもとのクエリにもとすと

SELECT
E.タイトル
--略---
K.監督名
FROM
映画テーブル E
INNER JOIN
(SELECT
E.タイトルid
J.名前 AS 監督名
FROM
映画関係者テーブル E
INNER JOIN
人物テーブル J
ON
E.監督id = J.id) K
ON
E.id = K.タイトルid

キャストも同様に
    • good
    • 0
この回答へのお礼

サブクエリのやり方を教えていただきありがとうございます。
そのうち、そのやり方でも挑戦してみます!

お礼日時:2011/06/18 09:55

select


タイトル, 画像, 制作年, あらすじ,
感想, 点数,
ジャンル1, ジャンル2,
E.名前 as 監督名,
F.名前 as キャスト1名,
G.名前 as キャスト2名,
H.名前 as キャスト3名

from 映画テーブル A
join 批評テーブル B on A.id = B.タイトルid
join ジャンルテーブル C on A.id = C.タイトルd
join 映画関係者テーブル D on A.id = D.タイトルid
join 人物テーブル E on D.監督id = E.id
join 人物テーブル F on D.キャスト1id = F.id
join 人物テーブル G on D.キャスト2id = G.id
join 人物テーブル H on D.キャスト3id = H.id
;
    • good
    • 0
この回答へのお礼

こんな丁寧に書いていただきありがとうございます。
おおいに参考にさせていただきました。
本当にありがとうございました。

お礼日時:2011/06/14 18:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!