2010-08-02 7 views
0

Есть ли способ, с помощью которого я могу удалить дублируемую запись, которая существует в таблице. Мне просто нужна одна запись, а остальные из них будут удалены по запросу. Это можно сделать с помощью запроса. пожалуйста, предложитеудаление дубликатов записей

+2

Существует, но вы должны научиться как поиск существующих ответов и принимать ответы на существующие вопросы. –

+0

Какие СУБД вы используете? Также, удовлетворены ли какие-либо из ваших последних 10 вопросов? Если да, можете ли вы принять на них ответы? –

+0

Если вы используете MySQL, вы можете проверить это сообщение со вчерашнего дня: http://stackoverflow.com/questions/3383898/remove-duplicates-using-only-a-mysql-query –

ответ

5

Попробуйте -

Добавить столбец ID в качестве IDENTITY в таблицу первым -

alter <tablename> add id INT IDENTITY 

Затем используйте ниже запрос для удаления дубликатов записей -

delete 
FROM <tablename> 
WHERE id IN 
(
SELECT MAX(id) 
FROM <tablename> 
GROUP BY <columnnames defining uniqueness> 
having count (*) > 1 
) 

Имейте ввиду, что он удаляет только один дубликат существующей строки. Если есть три строки, которые разделяют условие группировки - это не сработает, если вы не выполните запрос несколько раз (до тех пор, пока строки не будут удалены) или измените условие удаления.

0

использования distinct:

SELECT distinct * FROM Table .... 
0

Это в основном зависит от структуры вашей таблицы, количество контрсил имеют и количество столбцов в первичном ключе, если он имеет какой-либо.

Вам нужно найти оптимизированный запрос, который будет идентифицировать уникальные записи на основе указанных выше ограничений, а затем наиболее бессильно вам нужно учитывать время, затраченное на удаление этих дубликатов по вашему запросу.

Так что никто не может комментировать, если вы не публикуете полную структуру и некоторые примеры дубликатов данных.

Надеюсь, что этот небольшой вклад поможет.

0

Вот пример пример удаления дубликатов записей

Create table #Test (colA int not null, colB int not null, colC int not null, id int not null identity) on [Primary] 
GO 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 

INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 

INSERT INTO #Test (colA,colB,colC) VALUES (4,5,6) 
GO 
Select * from #Test 
GO 
Delete from #Test where id < 
(Select Max(id) from #Test t where #Test.colA = t.colA and 
#Test.colB = t.colB and 
#Test.colC = t.colC) 
GO 
Select * from #Test 
GO 
Смежные вопросы