sql >> Database >  >> RDS >> Mysql

Genormaliseerde database - ONE to VEEL - Doorzoek alle samengevoegde datasets

Hier is een manier om het te doen:

    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

Een andere manier die misschien efficiënter is. Dit veronderstelt dat er geen dups zijn in song_genre. COUNT(*) =X waarbij X gelijk is aan het aantal vermelde genres.

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. Bereken het verschil tussen twee datums in uren en minuten

  2. Wat is het equivalent van de Oracle Dual-tabel in MS SqlServer?

  3. Tellen en bestellen

  4. PL/SQL Hoe krijg ik X dag geleden van een datum als datum?