sql >> データベース >  >> RDS >> Mysql

正規化されたデータベース-1対多-結合されたすべてのデータセットを検索

    これを行う1つの方法は次のとおりです。

        SELECT DISTINCT song.song_id, song.title
        FROM song
        INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='1') genre1 
             ON genre1.song_id = song.song_id
        INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='2') genre2 
             ON genre2.song_id = song.song_id
    

    より効率的な別の方法。これは、song_genreに重複がないことを前提としています。 COUNT(*)=Xここで、Xはリストされているジャンルの数と同じです。

    SELECT DISTINCT song.song_id, song.title
    FROM song
    INNER JOIN (SELECT songid, COUNT(*) FROM song_genre 
    WHERE genre_id IN ('1','2') 
    GROUP BY songid HAVING COUNT(*) = 2) genre1 ON genre1.song_id = song.song_id
    


    1. Oracle-特定の行の実際のサイズを取得するにはどうすればよいですか?

    2. HTMLフォームからMySQLデータベースにデータを追加する

    3. MySQLは、最新のコメントまたは最後の投稿による投稿を注文します

    4. 部分的な結果データを配列にプッシュして送信します