sql >> Databáze >  >> RDS >> Mysql

Normalizovaná databáze - ONE to MANY - Prohledávejte všechny spojené datové sady

Zde je jeden způsob, jak to udělat:

    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

Další způsob, který by mohl být efektivnější. To předpokládá, že v song_genre nejsou žádné dupy. COUNT(*) =X, kde X se rovná počtu uvedených žánrů.

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. Jak vložit francouzské znaky do tabulky mySQL DB?

  2. Jak mohu vybrat pevný počet řádků pro každou skupinu?

  3. Zálohujte schéma MySQL s omezeními tabulky cizích klíčů

  4. jaký je rozdíl mezi GROUP BY a ORDER BY v sql