2014-01-05 2 views
8

У меня есть две таблицы в моей базе данных. Один по имени data, другой по имени changes.MySQL 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 | 
------------------------------------ 

Как вы можете видеть, changes. related_id является иностранным ключом к data. id. changes может иметь несколько строк одинаковых name и related_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 | 
-------------------- 

Как я могу идти о том, чтобы убедиться, что только одна строка возвращается? Я пошел так, чтобы искать ответы, и многие заявили, используя DISTINCT, но это не работает в моем случае.

Заранее спасибо.

+2

Вы получаете две разные записи. Какой комментарий должен быть возвращен и почему? –

+0

Любые записи могут быть возвращены. Мне нужно только уникальное имя с любыми связанными данными. Это возможно? – user2301818

+1

Если вам нужно только «имя», то выберите только «имя»: '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

это просто вау .. mysql не имеет номера строки/функций раздела –

+0

Отлично! Вам удастся решить мою проблему! Спасибо огромное! Узнал что-то новое сегодня :) – user2301818

+0

+1 для GROUP BY data.name – bizzr3