2014-01-05 141 views
8

我在我的数据库中有2个表。一个名为data,另一个名为changesMySQL Distinct和LEFT JOIN返回重复

表的列是

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_iddata的外键。 idchanges可以有多行相同的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,但它不适用于我的情况。

在此先感谢。

+2

你得到2个不同的记录返回。应该返回哪个评论,为什么? –

+0

可以返回任何记录。我只想要一个具有任何相关数据的独特'名称'。那可能吗? – user2301818

+1

如果您只需要'name',那么只需选择'name':'SELECT DISTINCT data.name FROM data ...'但是如果用户有多个参数,那么您甚至不需要'join' –

回答

14

如果你想为每名只有一条记录在您的data表,它可以任何记录,那么你可以通过唯一的列(name)组和使用聚合函数的另一列像max()

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

这只是wow..mysql没有行号/分区功能 –

+0

太棒了!你设法解决我的问题!非常感谢!今天学到了一些新东西:) – user2301818

+0

对于GROUP BY data.name +1 – bizzr3