Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление дублей  [new]
Guset
Guest
Добрый день, по ошибке допустил появление огромного кол-ва дублей, подскажите как можно удалить повторяющиеся строки при этом оставив по одной уникальной строке.
25 июн 15, 21:31    [17817445]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
;with CTE
as (
 select *
 ,row_number() over(order by Field1) as __rn__
from dbo.Table1
)
delete CTE where __RN__ > 1
25 июн 15, 21:32    [17817451]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Oleksii Kovalov,

главное чтобы автор темы F5 сразу не нажал. а то потом будет тема: "как восстановить..."
25 июн 15, 21:38    [17817476]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
churupaha
Oleksii Kovalov,

главное чтобы автор темы F5 сразу не нажал. а то потом будет тема: "как восстановить..."

Упс! А где же partition by?
то-то я думаю - чего то не хватает? :)

begin tran
go

;with CTE
as (
 select *
 ,row_number() over(partition by Field1, Field2,... order by Field1) as __rn__
from dbo.Table1
)
delete CTE where __RN__ > 1
go


заодно добавил бегин тран
Пора в отпуск, что ли :)
25 июн 15, 22:22    [17817642]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Oleksii Kovalov,

Ну и как завершающий штрих, - убрать *
25 июн 15, 22:43    [17817695]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
invm
Oleksii Kovalov,

Ну и как завершающий штрих, - убрать *

Думаю, непринципиально
в указанном виде можно законментить delete, написать вместо него select * выполнить и посмотреть что там получается
25 июн 15, 22:52    [17817716]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
invm
Member

Откуда: Москва
Сообщений: 9722
Oleksii Kovalov
Думаю, непринципиально
в указанном виде можно законментить delete, написать вместо него select * выполнить и посмотреть что там получается
Ну как раз если написать select вместо delete, то все столбцы на выходе и получим.
А для delete, да, непринципиально - несмотря на наличие *, читаются только столбцы, задействованные в предложении over() + закладка или ключ кластерного индекса.
Просто * в данном контексте выглядит неэстетично, имхо :)
25 июн 15, 23:07    [17817763]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
invm
Oleksii Kovalov
Думаю, непринципиально
в указанном виде можно законментить delete, написать вместо него select * выполнить и посмотреть что там получается
Ну как раз если написать select вместо delete, то все столбцы на выходе и получим.
А для delete, да, непринципиально - несмотря на наличие *, читаются только столбцы, задействованные в предложении over() + закладка или ключ кластерного индекса.
Просто * в данном контексте выглядит неэстетично, имхо :)

ну,для одноразовой операции можно более-менее пренебречь производительностью, тем более что при удалении всё равно спустимся к самым листьям так или иначе.
а возможность посмотреть перед удалением "а что собственно?" - и правда дорогого стоит :)
Чтобы, как правильно заметили, не возникало вопроса "а как теперь восстановить?"
25 июн 15, 23:29    [17817820]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Oleksii Kovalov
возможность посмотреть перед удалением "а что собственно?" - и правда дорогого стоит :)
Чтобы, как правильно заметили, не возникало вопроса "а как теперь восстановить?"

и кто мешает посмотреть?
begin tran;

with CTE as (
  select row_number() over(partition by Field1, Field2,... order by Field1) as __rn__
  from dbo.Table1
  )
delete CTE 
output deleted.*
where __RN__ > 1;

-- commit;
rollback;
25 июн 15, 23:39    [17817856]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Guset
Guest
Cygapb-007, спасибо всем, вечером попробую отпишусь
26 июн 15, 04:49    [17818162]     Ответить | Цитировать Сообщить модератору
 Re: Удаление дублей  [new]
Guset
Guest
Cygapb-007,
Все отлично 27к строк удалено, еще раз спасибо
26 июн 15, 22:06    [17822222]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить