MySQL Distinct和LEFT JOIN返回重复

时间:2014-01-05 14:19:09

标签: php mysql sql

我的数据库中有2个表。一个名为data,另一个名为changes

表的列是

Data

------------
|id | name |
|-----------
|1  | Test |
|2  | Hello|
------------

changes

------------------------------------
|id | name | related_id | Comments |
|-----------------------------------
|1  | Test |     1      |  Example |
|2  | Hello|     2      | Example2 |
|3  | Hello|     2      | Example3 |
------------------------------------

如您所见,changesrelated_iddataid的外键。 changes可以有多行相同的namerelated_id以及不同的评论。

运行此查询后,我意识到会返回多行,例如,Hello可能会出现2次。

SELECT DISTINCT data.name, changes.comments FROM data LEFT JOIN changes ON data.id = changes.related_id

Result

--------------------
|name   | comments |
|-------------------
|Hello  | Example2 |
|Hello  | Example3 |
--------------------

如何确保只返回1行?我开始寻找答案,许多人使用DISTINCT说明了,但在我的情况下它不起作用。

提前致谢。

1 个答案:

答案 0 :(得分:15)

如果您只希望data表中的每个名称都有一条记录,并且该记录可以是任何记录,那么您可以按唯一列(name)进行分组,在另一列上使用聚合函数,如max()

SELECT data.name, max(changes.comments)
FROM data 
LEFT JOIN changes ON data.id = changes.related_id
GROUP BY data.name