映画テーブル
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個のテーブル結合の方法が分かりません。
苦戦しているのは、人物テーブルと映画関係者テーブルを結合しての監督等の名前だけをとりだす方法です。ここだけ、別途で選択したほうがいいのでしょうか?
一度の処理で、全てのデータを取り出すのが理想なのですが、やはり、このテーブル構成自体に無理があるのでしょうか?
土曜、日曜と調べたのですが、ヒントすら探し出すことができませんでした。
よろしければ、テーブル結合の仕方を教えてください。
お願いします。
No.1ベストアンサー
- 回答日時:
>苦戦しているのは、人物テーブルと映画関係者テーブルを結合しての監督等の名前だけをとりだす方法です
とりあえずここについてのみ回答します。
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
となります。
もっとスマートなやり方もありますが、サブクエリが使う上に初心者だと取っつき難い方法になるので、ここではふれません。
同じ質問なのに、2回もお答えいただきありがとうございました。
おかげさまで、望み通りのサイトが作れそうです。
本当にありがとうございました。
No.3
- 回答日時:
サブクエリのほうが視覚的にわかりやすいと思います。
監督名をとりだす。
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
キャストも同様に
No.2
- 回答日時:
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
;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) accessについて 2 2022/05/31 16:58
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
副問合せの書き方について
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
SQL Left Join で重複を排除す...
-
[MySQL] UNIQUE制約の値を更新...
-
エラー 1068 (42000): 複数の主...
-
php+mysqlで複数選択削除について
-
別テーブルからSELECTした値を...
-
URL と行番号の指定
-
書籍の内容はまともでしょうか?
-
ストアドのエラーについて
-
ある条件の最大値+1を初番する...
-
希ヨードチンキの読み方 まれヨ...
-
複数JOINしているとCOUNTが正し...
-
エクセルの関数について教えて...
-
insertを高速化させたい
-
複数テーブルのGROUP BY の使い...
-
SQLにて特定の文字を除いた検索...
-
SQLサーバから、項目の属性(型...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
SQLにて特定の文字を除いた検索...
-
insertを高速化させたい
-
ある条件の最大値+1を初番する...
-
マイクラPC版のコマンドで効率...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報