Mysql
 sql >> база данни >  >> RDS >> Mysql

Нормализирана база данни - ЕДНО към МНОГО - Търсене във всички обединени набори от данни

Ето един начин да го направите:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирам стойност в ред в MySQL с помощта на Connector/C++

  2. Как да експортирате и импортирате .sql файл от командния ред с опции?

  3. Най-бързият начин за повторение през голяма таблица с помощта на JDBC

  4. MySQL (или PHP?) групира резултати по данни от полето

  5. Преброяване на всички публикации, принадлежащи към категория И нейните подкатегории