Как удалить дубликаты данных в SQL Server? - PullRequest
0 голосов
/ 10 марта 2009

У меня есть таблица sql, но при добавлении стоимости более одного раза мне нужно удалить один из них. Можете ли вы дать мне простой запрос?

Ответы [ 5 ]

7 голосов
/ 10 марта 2009

С здесь . Если у вас еще нет поля «ID», которое однозначно идентифицирует каждую строку, вам нужно создать его, чтобы это работало (вы всегда можете просто удалить столбец после того, как закончите):

DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY DuplicateColumn1, DuplicateColumn2, DuplicateColumn2)

Кроме того, выполните поиск на этом сайте для «удаления дубликатов SQL-сервера строк», и вы увидите, что на этот вопрос уже много раз отвечали здесь.

2 голосов
/ 10 марта 2009
DECLARE @Duplicates TABLE (AValue VARCHAR(32))

INSERT INTO @Duplicates VALUES ('No Duplicate')
INSERT INTO @Duplicates VALUES ('Duplicate')
INSERT INTO @Duplicates VALUES ('Duplicate')


SELECT ID = IDENTITY(INT, 1, 1), * 
INTO #Duplicates
FROM @Duplicates

DELETE FROM #Duplicates
FROM #Duplicates d
     INNER JOIN (
       SELECT ID = MIN(ID)
       FROM #Duplicates
       GROUP BY AValue
       HAVING COUNT(*) > 1
      ) id ON id.ID = d.ID

DELETE FROM @Duplicates

INSERT INTO @Duplicates
SELECT AValue FROM #Duplicates

DROP TABLE #Duplicates

SELECT * FROM @Duplicates
1 голос
/ 16 июня 2011
;WITH tempTable AS   
    (  
            SELECT ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column2 ) AS rownumber,*   
            FROM @Table  
    )  
    DELETE FROM tempTable WHERE rownumber > 1 

Это взято из ссылки на статью, упомянутой в одном из ответов, но только для того, чтобы спасти кого-нибудь в будущем.

0 голосов
/ 10 марта 2009
  • Создать временную таблицу с той же схемой
  • INSERT INTO temptable ВЫБРАТЬ DISTINCT * FROM oldtable
  • DELETE FROM oldtable
  • INSERT INTO oldtable SELECT * FROM temptable
  • Падение соблазнительно

И не забывайте:

  • Измените ваши таблицы так, чтобы это не повторилось
0 голосов
/ 10 марта 2009

Использование:
Установить RowCount 1

Затем запустите удаление sql

Это удалит 1 строку, независимо от того, совпадает ли несколько строк.

Затем либо закройте окно запроса, либо используйте Установите RowCount 0 для его сброса.

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