sql >> Databasteknik >  >> RDS >> Mysql

Normaliserad databas - EN till MÅNGA - Sök igenom alla sammanfogade datamängder

Här är ett sätt att göra det:

    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

Ett annat sätt som kan vara mer effektivt. Detta förutsätter att det inte finns några dups i song_genre. COUNT(*) =X där X är lika med antalet listade genrer.

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. PSQLE Undantag:Resultatuppsättningen är inte korrekt placerad, kanske måste du ringa nästa

  2. Skapa tabell med vb.net, mysql

  3. Stänger postgres (pg) klientanslutning i node.js

  4. MySQL inaktivera och aktivera nycklar