2016-02-11 2 views
1

У меня есть оператор select, возвращающий столбец идентификатора и значения. Значения в столбце ID отличаются друг от друга, но в столбце значений есть дубликаты.Как выбрать уникальные значения для столбца, где идентификаторы отличаются?

Вот пример:

ID | Value 
----------------------- 
    1  |  Bob 
    2  |  Jane 
    3  |  Bob 
    4  |  Mike 
    5  |  Suzy 
    6  |  Mike 

Как вы можете видеть, что есть 4 уникальное значение имен, но 6 записей возвращаются, так как идентификаторы все разные. Это обычно не должно быть сделано, но это всего лишь пример данных (на самом деле не использование имен), и для чего мне нужно сделать, мне нужно удалить записи с дублирующимися именами.

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

Любые идеи о том, как изменить оператор прямого прямого выбора, чтобы получить оба столбца, но с уникальными именами?

+0

Какое значение 'ID' следует запрос выбрать, когда есть больше чем один, имеющий тот же' value'? –

ответ

2

Это удаляет Recorde с совпадающими именами, но оставляет первую запись с наименьшим идентификатором.

DELETE FROM table t 
WHERE EXISTS (
    SELECT null FROM table t1 
    WHERE t.name = t1.name AND t.id < t1.id 
) 

Если вы хотите выбрать только запись, а затем

SELECT * FROM table t 
WHERE NOT EXISTS(
    SELECT null FROM table t1 
    WHERE t.name = t1.name AND t.id < t1.id 
) 
+0

OP фактически не просил ничего удалить. –

+0

@ Mick Mnemonic извините, я подумал, что «заставить его удалить дубликаты» означает «Я хочу удалить записи», вы правы, я был неправ. – krokodilko

+0

Операция select работает отлично. Мне нужна была эта часть. Благодаря! – Zolt

0

Try:

SELECT MIN(ID), Value 
FROM table 
GROUP BY Value 

Альтернатива:

SELECT DISTINCT MIN(ID) OVER (PARTITION BY Value), Value 
FROM table 
Смежные вопросы