ВЫБЕРИТЕ DISTINCT комбинацию разных значений плюс не отличные значения - PullRequest
1 голос
/ 10 июня 2011

У меня много проблем с поиском любой документации по выполнению простого запроса MySQL, который будет возвращать все отдельные значения из комбинации, но также будет возвращать другой столбец, который не является отдельным.

В моем случае report, topic, lat, lng, event должно быть отдельной комбинацией значений, но я также хочу вернуть столбец docID.

Если я включу docID в качестве отдельного значения, он возвращает каждый документ, поскольку каждый docID уникален.

SELECT distinct report, topic, lat, lng, event, /*and each of their*/ docID FROM reports

Я знаю, что этот вопросочень просто, но я просто не могу найти какую-либо документацию по этому поводу.

Ответы [ 5 ]

4 голосов
/ 10 июня 2011
SELECT report, topic, lat, lng, event, 
group_concat(docID) as ids 
FROM reports
group by report, topic, lat, lng, event
1 голос
/ 10 июня 2011

Логика может дать вам ответ.

Если несколько документов имеют одинаковую комбинацию (отчет, тема, широта, lng, событие), то какой docId вы хотели бы видеть из них?

Если вам нужны все из них, тогда вам не нужны реальные отличия.

Если вам нужен только один (или concat, или какая-либо операция), MySQL не может выбрать его для вас произвольно, вам нужно запросить его (MIN, MAX, FIRST, GROUP_CONCAT, ...).

Тогда ответ таков: вы должны использовать предложение GROUP. Нравится:

SELECT report, topic, lat, lng, event, MIN(docId) AS docIdMin 
FROM my_table
GROUP BY report, topic, lat, lng, event
1 голос
/ 10 июня 2011

Попробуйте использовать GROUP BY:

SELECT report, topic, lat, lng, event, docID
FROM reports
GROUP BY report, topic, lat, lng, event

Но учтите, что если в определенной группе дублируется docID, появится только одно значение.

0 голосов
/ 10 июня 2011

Я решаю эту проблему с помощью групп и Max или Min, поскольку для каждой отдельной строки может быть несколько значений DocId.

SELECT report, topic, lat, lng, event, Max(docID) FROM reports
group by report, topic, lat, lng, event
0 голосов
/ 10 июня 2011
select report, topic, lat, lng, event, max(docID)
From reports
group by report, topic, lat, lng, event

Оформить заказ по группе http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_max

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...