2014-02-12 5 views
4

Да, в этом вопросе есть тысяча вопросов, но я искал полчаса, и мне еще предстоит найти решение.SELECT DISTINCT все еще показывает дубликаты

Итак, у меня есть таблица вроде этого: enter image description here

И это мой запрос:

SELECT DISTINCT rengasID,leveys FROM renkaat ORDER BY leveys ASC 

И это результат я получаю:

enter image description here

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

Что я делаю неправильно?

+0

@marcosh: [Обычно MySQL (и в этом случае) рассматривает 'DISTINCT' как' GROUP BY'] (https://dev.mysql.com/doc/refman/5.7/en/distinct-optimization.html), поэтому 'DISTINCT' применяется к« комбинациям «rengasID» и «leveys». – bishop

+0

Этот результат показывает один столбец. Ваш запрос показывает два столбца!?!?!? – Strawberry

+0

@Christian Красиво отформатированный вопрос.(+1) – Bhushan

ответ

7

Если вы хотите различных levey с, просто выберите это поле:

SELECT DISTINCT leveys 
FROM renkaat 
ORDER BY leveys ASC 

rengasid имеет различное значение на каждой строке.

Предложение distinct применяется ко всем столбцам, возвращаемым независимо от круглых скобок.

EDIT:

Если вам нужно regasid в результате, а затем использовать group by:

select leveys, min(regasid) as regasid 
from renkaat 
group by leveys 
order by leveys asc; 

Это дает первый идентификатор. Если вам нужны все они, вы можете получить их в списке, используя group_concat(). Если вам нужен отдельный идентификатор для каждой строки, то у вас есть дубликаты.

+0

Да, это то, что я хочу для этого случая. Но для будущего: что делать, если мне нужно использовать rengasID? –

+0

Спасибо! :) Я буду принимать этот ответ, когда смогу. –

2

Ваш rengasID по-прежнему отличается в каждой строке. Отдельные будут проверять сочетание каждого выбранного поля, поэтому в этом случае он будет искать отличную комбинацию из rengasID и leveys.

Здесь вы не можете запрашивать свой идентификатор, так как MySQL не знает, какой из них вы хотите.

В зависимости от того, что вы хотите сделать, может быть более правильным сохранить ваши «левеи» (я не уверен, что они есть) в отдельной таблице с уникальным идентификатором и присоединиться к нему. Чтобы заполнить свой список всеми возможными значениями, вы можете просто запросить эту новую таблицу. Это может быть важно, потому что с помощью group by вы можете получить случайные результаты для id позже.

0

Это потому, что вы выбираете комбинацию из rengasID и leveys. И то, что вы получаете в результате, представляет собой отличную комбинацию из двух.

Чтобы достичь того, что вы пытаетесь, см. Ответ @GordonLinoff.

+0

О да. rengasID оказывается уникальным, поэтому запрос считает, что дубликатов нет. –

Смежные вопросы