sql >> Database teknologi >  >> RDS >> Mysql

Normaliseret database - EN til MANGE - Søg gennem alle sammenkoblede datasæt

Her er en måde at gøre det på:

    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

En anden måde, der kan være mere effektiv. Dette forudsætter, at der ikke er nogen dups i song_genre. COUNT(*) =X hvor X er lig med antallet af genrer på listen.

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. Rækkemønstergenkendelse i SQL

  2. Nye funktioner i SQL Server 2017 (Database Engine)

  3. Konstruktion af en midlertidig tabel i Oracle SQL

  4. Hvordan kan jeg løse en ORA-01427-fejl (enkelt-række-underforespørgsel returnerer mere end én række)?