2015-11-08 5 views
1

Я написал запрос, чтобы найти повторяющиеся строки в таблице. Он выводит повторяющиеся пары (например, row: 1,2 после этого enounter row: 2,1)Удаление повторяющихся строк в таблице

SELECT m1.ID, m2.ID 
FROM AccessLog_Manual m1 
    INNER JOIN AccessLog_Manual m2 ON 
     m1.ACCESS = m2.ACCESS AND 
     m1.EMPLOYEEID = m2.EMPLOYEEID AND 
     m1.LOGDATETIME = m2.LOGDATETIME AND 
     m1.MORPHOACCESSID = m2.MORPHOACCESSID AND 
     m1.ID <> m2.ID 
ORDER BY m1.ID 

Теперь я хочу использовать этот запрос в ВЕЬЕТЕ, так что удаление только один ряд пар. (То есть, например row 1,2 и row 2,1, только удалить 1 и пусть 2 не удаленный)

+0

Что RDBMS вы используете? Некоторые позволяют удалять с помощью JOIN, некоторые - нет. –

+0

@MattGibson Sql Server –

+0

@jso Этот вопрос отличается. Мой запрос выводит повторяющиеся пары, появляется вверх и вниз. –

ответ

0

Вы можете использовать row_number() для присвоения номеров строк вы считаете дубликатом. Число выше 1 означает, что строка дублируется.

Например:

; with numbered as 
     (
     select row_number() over (
        partition by ACCESS, EMPOYEEID, LOGDATETIME, MORPHOACCESSID 
        order by ID) as rn 
     ,  * 
     from AccessLog_Manual 
     ) 
delete numbered 
where rn > 1; 

See it working at SQL Fiddle.

+0

Как удалить повторяющиеся строки (в качестве состояний вопросов)? –

+0

Нет необходимости в 'in'. Можно просто удалить из CTE прямо http://stackoverflow.com/a/3822833/73226 –

+0

@MartinSmith: Интересно, обновлено в ответ. @Kilanny: запрос в ответе удаляет дубликаты (используя оператор 'delete') – Andomar

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