Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用连接表避免重复行。(如何使用它)?_Mysql_Sql_Rdbms - Fatal编程技术网

Mysql 如何使用连接表避免重复行。(如何使用它)?

Mysql 如何使用连接表避免重复行。(如何使用它)?,mysql,sql,rdbms,Mysql,Sql,Rdbms,因为一首歌可以有几个作曲人,而一个作曲人可以写几首歌,所以我创建了一个连接表songwriter\u track。但我不知道如何将它与我的普通曲目表“结合”。我希望能够从我的曲目表中选择属性,同时获得歌曲的作者。但不幸的是,我目前的解决方案返回了重复的歌曲。我做错了什么?有办法解决这个问题吗?我必须运行两个查询吗 这是我的桌子: TABLE track( track_id INT PRIMARY KEY track_title VAR

因为一首歌可以有几个作曲人,而一个作曲人可以写几首歌,所以我创建了一个连接表
songwriter\u track
。但我不知道如何将它与我的普通
曲目
表“结合”。我希望能够从我的
曲目
表中选择属性,同时获得歌曲的作者。但不幸的是,我目前的解决方案返回了重复的歌曲。我做错了什么?有办法解决这个问题吗?我必须运行两个查询吗

这是我的桌子:

   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

“曲目”和作曲人有什么关系?“曲目”有一首歌,但我认为歌曲有作曲者。我不知道你的意思。一首歌/一首歌有作曲人。@LarsLogik:那么你预期的结果是什么?对于每首歌曲,我们可以将所有的歌曲作者以逗号分隔的列表列在一列中,这样可以吗?另外,请您用您正在使用的RDBMS标记您的问题:oracle、mysql、sql server…?@LarsLogik。“曲目”不是“歌曲”。“曲目”是在“唱片集”上录制的一首歌(至少我在英语中理解这些术语)。