Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Basis data yang dinormalisasi - SATU ke BANYAK - Cari melalui semua kumpulan data yang digabungkan

Inilah salah satu cara untuk melakukannya:

    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

Cara lain yang mungkin lebih efisien. Ini mengasumsikan tidak ada dups di song_genre. COUNT(*) =X di mana X sama dengan jumlah genre yang terdaftar.

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 dan kemungkinan id yang salah dikembalikan oleh LAST_INSERT_ID()

  2. ImportError:Tidak ada modul bernama mysql.connector menggunakan Python3?

  3. Terlalu banyak peningkatan otomatis dengan ON DUPLICATE KEY UPDATE

  4. Mengambil id sisipan terakhir menunjukkan nomor yang salah

  5. Bagaimana cara mendapatkan catatan berikutnya di dalam kumpulan data hasil mysql?