ポップとエレクトロニックの両方のジャンルを持つデータベースのトラックの曲名をプルできるMySQLクエリを作成しようとしています。正規化されたデータベース - 1から全部 - 結合されたすべてのデータセットを検索
+----------------------------------------------------+
TABLE: SONG
+----------------------------------------------------+
song_id | title |
1 | song name |
+----------------------------------------------------+
TABLE: GENRE
+----------------------------------------------------+
genre_id | name |
1 | Pop |
2 | Electronic |
+----------------------------------------------------+
TABLE: SONG_GENRE
+----------------------------------------------------+
genre_id | song_id |
1 | 1 |
2 | 1 |
このSQLは、明らかに1のgenre_idと2の両方を返すために行くことはありませんが、私は立ち往生午前ところ、これがある限り、動作しません。
SELECT DISTINCT song.song_id, song.title
FROM song
LEFT JOIN song_genre ON song_genre.song_id = song.song_id
LEFT JOIN genre ON genre.genre_id = song_genre.genre_id
WHERE genre.genre_id ='1'
AND genre.genre_id='2'
誰かが正しい方向に私を指すことができたなら、私は最も素晴らしいでしょう!
ご協力ありがとうございます。これはうまくいきますが、私はこれがいかにうまくスケールされるかわかりません。たとえば、楽器、気分などを追加した場合、かなり大きなクエリが作成されます。これはどれくらい効果的でしょうか?私のデータベース設計に何か問題がありますか?あれば、どのように改善することができますか? – Sharpedges
もっと管理しやすいSQLの答えが更新されました。あなたのデザインは大丈夫です - 私はいつも正しく正規化されていると思っています。これまでのパフォーマンスはあまり心配しません。後で問題が発生した場合は、非正規化を検討することができます。 –
これは素晴らしい答えです。私は私が必要としていることを正確に行うことができました。ご協力ありがとうございました。 – Sharpedges