нарушение первичного ключа - дедупликация - PullRequest
1 голос
/ 29 марта 2012

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

insert into temp(profile,feed,photo,dateadded) 
select distinct  profile,feed,photo,dateadded from original as s 
where not exists(select 1 from temp as t where t.profile=s.profile) 

Это просто вызывает нарушение ключевой ошибки.Я попытался использовать следующее:

insert into temp(profile,feed,photo,dateadded) 
select distinct    profile,feed,photo,dateadded from original as s  
left outer join temp t on t.profile=s.profile 
where t.profile is null 

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

1 Ответ

1 голос
/ 29 марта 2012

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

Другой подход заключается в использовании group by и использовании самого раннего dateadded дляудалите все дубликаты.

Может быть, что-то вроде этого:

Select Profile,
       Feed,
       Photo,
       Min(DateAdded) as [DateAdded]

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