5つのテーブルを結合する方法について
- 5つのテーブルを結合する方法についての質問です。現在、映画テーブル、批評テーブル、ジャンルテーブル、人物テーブル、映画関係者テーブルの5つのテーブルがありますが、これらを結合してデータを取得する方法が分かりません。
- 特に問題なのは、人物テーブルと映画関係者テーブルを結合して監督やキャストの名前だけを取り出す方法です。現在のテーブル構成では、一度の処理で全てのデータを取得するのが難しいかもしれません。
- ネットや専門書でも3つのテーブル結合までしか掲載されておらず、5つのテーブル結合の方法が探せませんでした。土曜日と日曜日にも調べたのですが、ヒントすら見つけることができませんでした。助けていただきたいです。
- ベストアンサー
テーブルが5つの時の結合の仕方を知りたいです。
映画テーブル 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個のテーブル結合の方法が分かりません。 苦戦しているのは、人物テーブルと映画関係者テーブルを結合しての監督等の名前だけをとりだす方法です。ここだけ、別途で選択したほうがいいのでしょうか? 一度の処理で、全てのデータを取り出すのが理想なのですが、やはり、このテーブル構成自体に無理があるのでしょうか? 土曜、日曜と調べたのですが、ヒントすら探し出すことができませんでした。 よろしければ、テーブル結合の仕方を教えてください。 お願いします。
- sryou1985kun
- お礼率44% (15/34)
- MySQL
- 回答数3
- ありがとう数3
- みんなの回答 (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 となります。 もっとスマートなやり方もありますが、サブクエリが使う上に初心者だと取っつき難い方法になるので、ここではふれません。
その他の回答 (2)
- o_chi_chi
- ベストアンサー率45% (131/287)
サブクエリのほうが視覚的にわかりやすいと思います。 監督名をとりだす。 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 キャストも同様に
お礼
サブクエリのやり方を教えていただきありがとうございます。 そのうち、そのやり方でも挑戦してみます!
- jjon-com
- ベストアンサー率61% (1599/2592)
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
- テーブルが5つの時の結合の仕方を知りたいです。
映画テーブル id、タイトル、画像、制作年、あらすじ 批評テーブル タイトルid、感想、点数(10点満点) ジャンルテーブル(このテーブルには最初から全ジャンルが入っています) タイトルd、ジャンル1、ジャンル2 映画関係者テーブル(名前が追加されていき、重複のないリストになる) id、 名前 1 ブラピ 2 レオナルド 3 ジョージ 4 ミラ 映画関係者テーブル タイトルid、 監督id(映画関係者テーブルからidを取得)、 3 キャスト1id(同じく映画関係者テーブルのidを取得)、 1 キャスト2id(同じく映画関係者テーブルのidを取得)、 2 キャスト3id(同じく映画関係者テーブルのidを取得)、 4 というようなテーブルを5個作成しました。 select時に取り出したい内容は、タイトル、画像、制作年、あらすじ、感想、点数、 ジャンル1、ジャンル2、監督名、キャスト1名、キャスト2名、キャスト3名 の12個です。 しかし、ネットや専門書で調べても3個までのテーブル結合しか掲載されおらず、5個のテーブル結合の方法が分かりません。 土曜、日曜と調べたのですが、ヒントすら探し出すことができませんでした。 やはり、このテーブル構成自体に無理があるのでしょうか? よろしければ、テーブル結合の仕方を教えてください。 お願いします。
- ベストアンサー
- MySQL
- 2つのテーブルの結合に関してです
お世話になります PHP5,MySql5.0.33にて開発を行っています 2つのテーブルの結合部分で困っています TABLE1 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1 2/27 2/20 10 2 2/27 2/20 10 ---------------------------------- TABLE2 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1 2/21 2/26 5 2 2/21 2/27 5 ---------------------------------- 上記2つのテーブル(TABLE1/TABLE2)から TABLE1のDATE1=2/27より過去の行とTABLE2のDATE2=2/27より過去の行を 取得したいのですが上手くいかず…(下SQLで記述しています) SELECT DISTINCT TABLE1.* FROM TABLE1,TABLE2 WHERE TABLE1.ID=TABLE2.ID AND TABLE1.ID=1 AND (TABLE1.DATE1<='2009/2/27' OR TABLE2.DATE2<='2009/2/27') (結合のそもそもの理解が間違っているかも知れませんが…;) 宜しくお願いします
- ベストアンサー
- MySQL
- 2つのテーブル結合
Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。
- ベストアンサー
- Oracle
- 2つのテーブルを結合する条件
現在、MySQLを使用しており2つのテーブルの結合条件がわからないので教えてください。 name_masterとmeiboの2つのテーブルがあります。 meiboとname_masterを結合させてname_idとname_id2が日本語に置き換わった状態で 取得させたいと思っています。どのようにwhere句の条件を作成すればよいでしょうか。 取得する項目のイメージとしては以下の3つが取得できるようにしたいです。 「meibo.no, meibo.name_idの日本語, meibo.name_id2の日本語」 【name_masterテーブル】 id name 1 ポチ 2 タマ 3 ミケ 4 ハチ 5 タロウ 【meiboテーブル】 no name_id name_id2 1 3 1 2 4 2 3 5 3
- ベストアンサー
- MySQL
- 巨大テーブルの外部結合
巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。
- 締切済み
- Oracle
- 2テーブルが同じユーザテーブル参照するときの結合
2つのテーブルで、同じユーザテーブルを参照してデータ取得したいのですが、 どうやって結合すれば良いのでしょうか? ■概要 ・ユーザがアクションに挑戦すると、結果を表示 ・その際、「アクション作成者」と「アクション挑戦者(ユーザ)」を表示したい ※「作成者」「挑戦者」は、同じ「user」テーブルで管理したい ■3テーブル ・「result」「action」「user」 ・「result」「action」テーブルには、それぞれ「user_id」カラムがある ・「result」テーブルには、「action_id」カラムがある。1対多? ■知りたいこと ・一気にまとめて一覧として取得する方法 ・最終的に「結果」と、「result」「action」それぞれに対応した「user」テーブルの「name」カラムを取得したい ■試してみたこと ・これだと「挑戦者名」が取得できない SELECT * FROM result r LEFT JOIN `action` a ON r.`action_id` = a.`id` LEFT JOIN `user` u ON r.`user_id` = u.`id` ・これだと「挑戦者」のユーザIDしか取得できない SELECT *,a.user_id AS actionuser_id FROM result r LEFT JOIN `action` a ON r.`action_id` = a.`id` LEFT JOIN `user` u ON a.`user_id` = u.`id`
- ベストアンサー
- MySQL
- 4つのテーブルを結合して集計したいです。
mysql&php初心者です。 考えて4日目になりますがどうしても出来ないので宜しくお願いします。 現在使っているのは MYSQL4.1でレンタルサーバーです。 そしてCREATE TEMPORARY・CREATE VIEWは使用できないみたいです。 そしてやりたいことは4つのテーブルを結合して集計したいです。 具体的には テーブル1 ID・会社名の順に 35・テスト会社 テーブル2 ID・受注内容・受注金額 35・テスト受注・100000 テーブル3 ID・経 費 35・200 テーブル4 ID・仕 入 35・200 35・500 の4つです。 で希望の結果は ID・会社名・受注内容・経費・仕入 35・テスト会社・テスト受注・200・700 と出したいのですがどうしても経費の部分が『400』となってしまいます。 無理なことをしようとしているのかも知れませんが宜しくお願いします
- ベストアンサー
- MySQL
- テーブルの結合について
野球のスコア表を付けようと考えています。 scoreというテーブルにスコアを、 teamというテーブルにチーム名(team_idとteam_name)を入れています。 scoreテーブルには一行でホームチームのidとスコア、ビジターチームのidとスコアを入れています。 そして、そのidとteamテーブルにあるidとを結合しています。 しかし、PHPで読み込む際に(おそらく行の先頭に近いからという理由で)ビジターチームだけを読み込んでしまい、たとえば「横浜対横浜」のような形になってしまいます。 PHPでもう一回ホームチームだけを読み込むようにプログラムすれば問題なく表示はできるのですが、効率が悪いように感じます。 そこで、一回でホームチームとビジターチームの両方を読み込む方法をご教示賜りたく質問させていただきました。 テーブルの構造が悪いと思うのでMySQLの方に投稿させていただきましたが、PHPで可能であればそちらでもかまいません。 よろしくお願いします。 Apache 1.3.34 PHP 4.3.11 MySQL 4.0.26
- ベストアンサー
- MySQL
- SQLのテーブル結合
SQLのSELECTについて質問です。 テーブルA、B、Cから情報を取得し、下記の画面イメージを表示させたいのですが、 どのようにテーブルを結合すればよいか判りません。 どなたかご教示ください・・・。よろしくお願いします。 #テーブルCから組名を取得するような処理は画面表示のロジックで行います。 #テーブルA、Bの結合についてのみ、教えていただきたいです。 条件 ・氏名と、所属情報の○×を表示したい ・DISTINCT等、重たい処理は避けたい 画面イメージ |氏名 |赤組|白組|青組| ------------------------------ |山田太郎|○ |× |× | |山田花子|× |○ |○ | テーブルA |個人ID|氏名 | -------------------- |000001|山田太郎| |000002|山田花子| テーブルB |個人ID|組コード| -------------------- |000001|1110 | |000002|1111 | |000002|1112 | テーブルC |組コード|組名| ------------------ |1110 |赤組| |1111 |白組| |1112 |青組|
- ベストアンサー
- Oracle
- 異なるサーバーのテーブルを結合する方法
SSIS初心者です。 SSISで異なるサーバーのテーブルを結合する方法を教えて頂きたいです。 環境のイメージとしては サーバー1のテーブルAと サーバー2のテーブルBを結合して サーバー2のテーブルCに登録処理を行いたいです。 二つのDBはスキーマ名、ログインID、パスワードが全て異なります。 ご教示頂けましたら、助かります。 宜しくお願い致します。
- ベストアンサー
- SQL Server
お礼
同じ質問なのに、2回もお答えいただきありがとうございました。 おかげさまで、望み通りのサイトが作れそうです。 本当にありがとうございました。