连接多个表时重复的值

时间:2016-03-12 04:23:09

标签: mysql join

我正在尝试加入3个表来生成一个显示会员姓名,网站和音乐专辑的页面。

我遇到的问题是我收到重复数据。

例如,我得到的行重复两次专辑标题;并且网站价值重复三次。

以下是我的表格的样子:

member_profiles

id   |   alias_name
2    |  Lazy Turtle
3    |    Ms. Cat

member_websites

id   |   member_id   |         site_url         |   site_title
57   |       3       |     http://example.com   |   My Site
58   |       3       |   http://fakesite.com    |   Cool Site
59   |       2       |  http://anotherfake.com  |  Turtlez Site

music_albums

id   |   member_id   |        album_title
5    |       3       |      Cats Rock N Roll
6    |       2       |        My Slowness
7    |       3       |  Meow Pt. II (The Remixes)
8    |       3       |  The Worst Songs I've Made

如何解决这个问题而不必分开我的查询并可能影响性能? 我的SQL查询看起来像这样:

SELECT mp.name, mw.site_url, mw.site_title, ma.album_title
FROM member_profiles mp
LEFT JOIN member_websites mw ON mw.member_id = mp.id
LEFT JOIN music_albums ma ON ma.member_id = mp.id
WHERE mp.id = 3

2 个答案:

答案 0 :(得分:1)

只需添加一些GROUP_COCAT()。

SELECT mp.name, GROUP_CONCAT(mw.site_url), GROUP_CONCAT(mw.site_title), GROUP_CONCAT(ma.album_title)
FROM member_profiles mp
LEFT JOIN member_websites mw ON mw.member_id = mp.id
LEFT JOIN music_albums ma ON ma.member_id = mp.id
WHERE mp.id = 3

答案 1 :(得分:0)

您正在使用主表连接,其他表有多个网站和多个音乐专辑,您可以使用子查询为您答案。

SELECT mp.name,
 ( select group_concat(mw.site_url) from member_websites mw where mw.member_id = mp.id) as websites ,
 (select group_concat(ma.album_title) from music_albums ma where ma.member_id = mp.id) as albums
FROM member_profiles mp
WHERE mp.id = 3