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。“曲目”不是“歌曲”。“曲目”是在“唱片集”上录制的一首歌(至少我在英语中理解这些术语)。