SQL左连接和group_concat返回重复数据

Posted

技术标签:

【中文标题】SQL左连接和group_concat返回重复数据【英文标题】:SQL left join and group_concat returns duplicate data 【发布时间】:2014-10-08 03:36:35 【问题描述】:

我正在尝试使用 2 个左连接从 3 个不同的表中返回数据。所有表都返回多行。 这是我的声明:

SELECT s.*, GROUP_CONCAT(sp.photo) AS photos, GROUP_CONCAT(st.name) AS tags
FROM sites s
LEFT JOIN sites_photos sp
ON sp.sites_id = s.id
LEFT JOIN sites_tags st
ON st.sites_id = s.id
WHERE s.id = 30

这个语句返回的数据如下:

Array
(
[id] => 30
[url] => www.test.be
[name] => test
[date] => 2014-08-16
[photos] => 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132191_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg, 201408141132194_gummies.jpg
[tags] => test, hello, ale, print, social, more, hcp, test, hello, ale, print, social, more, hcp
)

如您所见,“标签”被返回两次,“照片”被返回超过 5 次。当我删除一个 LEFT JOIN 时,查询返回正确的数据。如何防止语句返回重复数据?

提前致谢。

【问题讨论】:

【参考方案1】:

使用

GROUP_CONCAT(DISTINCT sp.photo) AS photos, GROUP_CONCAT(DISTINCT st.name)

【讨论】:

完美! DISTINCT 究竟做了什么? 它将选择不同的值。 翻译它 ;) 只会选择唯一值。感谢您的帮助。

以上是关于SQL左连接和group_concat返回重复数据的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中完成 MYSQL 的 Group_Concat [重复]

带有大量左连接的 SQL 查询

SQL Server:如果左连接没有结果,则返回占位符/文本[重复]

左连接返回重复的行

具有多个左连接的 SQL 重复行

MySQL - GROUP_CONCAT 返回重复数据,不能使用 DISTINCT