Как удалить дубликаты данных из таблицы SQL - PullRequest
0 голосов
/ 22 сентября 2011

Я загружаю и обновляю свою базу данных из сторонних источников. К сожалению, в данных из стороннего источника данных много повторяющихся записей.

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

В моем случае столбец идентификаторов отсутствует. например

State   City    SubDiv  Pincode Locality Lat    Long
Orissa  Koraput Jeypore 764001  B.D.Pur 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693
Orissa  Koraput Jeypore 764001  Jeypore 18.7743 82.5693

Есть ли простой запрос, который я могу выполнить, чтобы удалить все дублирующиеся записи и сохранить одну запись как оригинал? Поэтому в приведенном выше случае я хочу удалить строки 3,4,5 из таблицы.

Я не уверен, что это можно сделать с помощью простых SQL-операторов, но хотел бы узнать мнение других, как это можно сделать

Ответы [ 5 ]

7 голосов
/ 22 сентября 2011
;with cte as(
select State City, SubDiv, Pincode, Locality, Lat, Long, 
row_number() over (partition by City, SubDiv, Pincode, Locality, Lat,Long order by City) rn
from yourtable
)
delete cte where rn > 1
5 голосов
/ 22 сентября 2011

Я бы вставил сторонние данные во временную таблицу, которая затем:

insert into
  target_table
select distinct
  *
from
  temporary_table

и, наконец, удалил временную таблицу.

В отчет будут вставлены только отдельные (уникальные) строки.целевой стол.

3 голосов
/ 22 сентября 2011

Один из

  • добавить столбец для дублирования и оставить его
  • сделать SELECT DISTINCT * INTO ANewTable FROM OldTable, а затем переименовать и т. Д.
  • Использовать подход t-clausen.dk CTE

А затем добавьте уникальный индекс в нужные столбцы

2 голосов
/ 22 сентября 2011

Вы можете использовать функцию ROW_NUMBER (): SQL SERVER - 2005 - 2008 - Удалить дублирующиеся строки

0 голосов
/ 22 сентября 2011

Попробуйте это

alter table mytable add id int identity(1,1)

delete  mytable  where id in (
select duplicateid from (select ROW_NUMBER() over (partition by State ,City ,SubDiv ,Pincode ,Locality ,Lat ,Long order by State ,City ,SubDiv ,Pincode ,Locality ,Lat ,Long ) duplicateid
from mytable) t where duplicateid !=1)

alter table mytable drop column id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...