我正在尝试加入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
答案 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