如何避免具有联结 table 的重复行。 (如何使用它)?

How to avoid duplicate rows with junction table. (How to use it)?

由于一首歌可以有多个词曲作者,一个词曲作者可以写几首歌曲,所以我创建了一个结点-table songwriter_track。但是我不确定如何用我的普通 track table "combine it"。我希望能够从我的 track table 中获取 select 属性,同时获取歌曲的词曲作者。但不幸的是,我目前的解决方案 returns 歌曲重复。我做错了什么?有办法解决这个问题吗?我必须 运行 两次查询吗?

这是我的 tables:

   TABLE track(
         track_id     INT PRIMARY KEY
         track_title       VARCHAR(100)
         track_duration    VARCHAR(100)
         lyric_url         VARCHAR(150))

  TABLE songwriter(
        songwriter_id INT  PRIMARY KEY
        songwriter_name VARCHAR(30)  
        UNIQUE INDEX (songwriter_name))

  TABLE songwriter_track(
        id_songwriter INT REFERENCES songwriter(songwriter_id)
        id_track      INT REFERENCES track(track_id)
        PRIMARY KEY (id_songwriter, id_track))


 VIEW `tracks_view` AS "
      "SELECT t.*, s.songwriter_name  "
           "FROM track t "
           "INNER JOIN songwriter_track st "
           "ON t.track_id = st.id_track "
           "INNER JOIN songwriter s "
           "ON s.songwriter_id = st.id_songwriter;";

如果您只想为每个曲目生成一条记录,一种解决方案是将所有词曲作者作为逗号分隔列表放在一列中。

考虑:

select 
    t.track_id, 
    t.track_title, 
    t.track_duration, 
    t.lyric_url,
    group_concat(s.songwriter_name order by s.songwriter_name) songwriters
from track t
inner join songwriter_track st on st.id_track = t.track_id
inner join songwriter s on s.songwriter_id = sr.id_songwriter
group by 
    t.track_id, 
    t.track_title, 
    t.track_duration, 
    t.lyric_url