Удаление дубликатов записей из таблицы - PullRequest
5 голосов
/ 17 декабря 2010

У меня есть таблица Table1, в которой 48 записей. Из которых только 24 должны быть в этой таблице. По какой-то причине я вставил в него дубликаты записей. Как удалить дубликаты записей из этой таблицы.

Ответы [ 3 ]

5 голосов
/ 17 декабря 2010

Вот что вы можете попробовать, если версия SQL Server 2005 или более поздняя.

WITH cte AS
    (
    SELECT {list-of-columns-in-table},
      row_number() over (PARTITION BY {list-of-key-columns} ORDER BY {rule-to-determine-row-to-keep}) as sequence
    FROM myTable
    )

DELETE FROM cte
WHERE sequence > 1

При этом используется общее табличное выражение (CTE) и добавляется столбец последовательности.{list-columns-in-table} так же, как это говорится.Не все столбцы нужны, но я не буду здесь объяснять.

{список-ключей-столбцов] - это столбцы, которые вы используете для определения дубликата.

{rule-to-define-row-to-keep} - это последовательность, так что первая строка - это строка, которую нужно сохранить.Например, если вы хотите сохранить самую старую строку, вы должны использовать столбец даты для последовательности.

Вот пример запроса с реальными столбцами.

WITH cte AS
    (
    SELECT ID, CourseName, DateAdded,
        row_number() over (PARTITION BY CourseName ORDER BY DateAdded) as sequence
    FROM Courses
    )

DELETE FROM cte
WHERE sequence > 1

В этом примере удаляются дубликаты.строки, основанные на значении CoursName и сохраняющие самые старые based на значении DateAdded.

0 голосов
/ 17 декабря 2010

Это более простой способ

Select * Into #TempTable FROM  YourTable
Truncate Table YourTable
Insert into YourTable Select Distinct * from #TempTable
Drop Table #TempTable
0 голосов
/ 17 декабря 2010

http://support.microsoft.com/kb/139444

Этот раздел является клавишей . основной пункт, который вы должны забрать.;)

В этой статье рассказывается, как найти и удалить повторяющиеся первичные ключи из таблицы.Однако вам следует внимательно изучить процесс, который позволил появлению дубликатов, чтобы предотвратить повторение.

Идентифицируйте свои записи, группируя данные по логическим ключам, поскольку вы, очевидно, не определили их,и применение оператора HAVING COUNT (*)> 1 в конце.Статья углубляется в это.

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