- ベストアンサー
MYSQLで表の結合と検索
- MYSQLで曲名テーブルとアーティストテーブル、名前テーブルを結合し、曲名テーブルのアーティストを検索する方法について教えてください。
- JOINを使用してテーブルの結合を行い、曲名テーブルのアーティストを検索する方法について教えてください。
- MYSQLのクエリーを使用して、曲名テーブルのアーティストを検索する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Select * From "曲名テーブル" as t1 Left Join "アーティストテーブル" as t2 On t1."アーティスト番号1" = t2."番号" Left Join "名前テーブル" as n_t1 On t2."アーティスト" = n_t1."番号" Left Join "アーティストテーブル" as t3 On t1."アーティスト番号2" = t3."番号" Left Join "名前テーブル" as n_t2 On t2."アーティスト" = n_t2."番号" Where (n_t1."名前" like '%大塚愛%' or n_t2."名前" like '%大塚愛%') 純粋にorでどちらかがhitすれば出るようにしてるだけですね。 頂いた情報をもとに書くとすればこんな感じでしょうか。 作曲者と編曲も同じようにすれば大丈夫です。
その他の回答 (2)
アーティストテーブルに曲と名が付随してると思ったのですが違うのですか?? まぁ、アーティストと名前テーブルの違いがよくわかってないのがいけませんね ダミーでいいので実データいれたらどんな感じになるんですか? こういうデータ構成かなと思ったんですが・・・ 曲名テーブル 番号,曲名,アーティスト 1,さくらんぼ,1 アーティストテーブル 番号,アーティスト 1,1 名前テーブル 番号,名前,読み 1,大塚愛,おおつかあい この文を読んでると >さらに、下記のように、[アーティスト番号1]と[アーティスト番号2]から >大塚愛やSMAPと検索したい場合はどうなりますでしょうか? テーブルに対して私の認識違いがございますね お答えにならなくてもいいのですが、業務、趣味または学校の宿題なんでしょうか?
補足
もう少し詳しく書きます。 曲名テーブルのアーティスト番号1、アーティスト番号2、作詞、作曲は、 別のテーブルのアーティストテーブルや作詞テーブルから参照していて、 さらに、アーティストテーブルや作詞テーブルのデータは名前テーブルから参照しています。 この場合に、アーティスト番号1又はアーティスト番号2を検索し、結果を表示させたいです。 >お答えにならなくてもいいのですが、業務、趣味または学校の宿題なんでしょうか? 業務であるサイトのテスト用のプログラムが必要なのですが、 当方、あまり詳しくないので、こちらでお聞きしました。 曲名テーブル +---------------+---------------+-----------------+-----------------+ |................[番号]............|................[曲名]............|..[アーティスト番号1]..|..[アーティスト番号2]..| +---------------+---------------+-----------------+-----------------+ 曲名テーブル(続き) +-----------------+-----------------+ .|.................[作詞].................|...................[作曲].............| +-----------------+-----------------+ アーティストテーブル +---------------+---------------+ |................[番号]............|.......[アーティスト].....| +---------------+---------------+ 作詞テーブル +---------------+---------------+ |................[番号]............|...............[名前]............| +---------------+---------------+ 作曲テーブル +---------------+---------------+ |................[番号]............|...............[名前]............| +---------------+---------------+ 名前テーブル +---------------+---------------+---------------+ |................[番号]............|...............[名前]............|................[読み]............| +---------------+---------------+---------------+ ↓、1000の番号はNullが入っています。 曲名テーブル 番号,曲名,アーティスト番号1,アーティスト番号2 1,さくらんぼ,1,1000 2,Wing my Way,2,1000 3,Rumbling Hearts,3,4 4,,仮面,8,1000 アーティストテーブル 番号,アーティスト 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 1000,, 作曲テーブル 番号,アーティスト 1,6 2,2 3,1 4,4 5,5 6,3 7,5 1000,, 作曲テーブル 番号,アーティスト 1,2 2,5 3,3 4,4 5,7 6,6 7,1 1000,, 名前テーブル 番号,名前,読み 1,大塚愛,おおつかあい 2,KOTOKO,ことこ 3,栗林みな実,くりばやしみなみ 4,石橋朋子,いしばしともこ 5,沢城みゆき,さわしろみゆき 6,いとうかなこ,いとうかなこ 7,水樹奈々,みずきなな 8,タッキー&翼 1000,,
Select * From "アーティストテーブル" as t1 Left Join "名前テーブル" as t2 On t1."番号" = t2."番号" Left Join "曲名テーブル" On t1."アーティスト" = t2."アーティスト" where t2."名前" like '%大塚愛%' こういうことですか? 曲名はたとえば"さくらんぼ"とかですから、人名が入ってくるのは名前テーブルの名前では? 間違っていたら申し訳ないですが 読んでいてわかりやすくカラム名を日本語で一部を書き換えるとこうなるのかな? 曲名テーブル +---------------+---------------+-------------------+ |................[番号]............|................[曲名]............|.......[アーティスト番号].....| +---------------+---------------+-------------------+ アーティストテーブル +-------------------+-------------------+ |................[名前番号]............|.......[アーティスト番号].....| +-------------------+-------------------+ 名前テーブル +-------------------+---------------+---------------+ |................[名前番号]............|...............[名前]............|................[読み]............| +-------------------+---------------+---------------+ こうすれば、正規化されてるかな・・・多分
補足
回答ありがとうございます。 失礼しました。 質問にミスが有りました。 正しくは、 where 曲名 like '%大塚愛%'" ではなく、 where アーティスト like '%大塚愛%'" でした。 さらに、下記のように、[アーティスト番号1]と[アーティスト番号2]から大塚愛やSMAPと検索したい場合はどうなりますでしょうか? 同じく[アーティストテーブル]の[番号]から参照しています。 曲名テーブル +---------------+---------------+-----------------+-----------------+ |................[番号]............|................[曲名]............|..[アーティスト番号1]..|..[アーティスト番号2]..| +---------------+---------------+-----------------+-----------------+
お礼
最後までお付き合いありがとうございます。 おかげさまでどうにかなりそうです。