Как удалить повторяющиеся строки?

Другой возможный способ сделать tsql это

; 

--Ensure that any immediately preceding statement is terminated with a semicolon above
WITH cte
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1, Col2, Col3 
                                       ORDER BY ( SELECT 0)) RN
         FROM   #MyTable)
DELETE FROM cte
WHERE  RN > 1;

Я использую ORDER BY (SELECT 0) выше, поскольку duplicate произвольно, какую строку mssql сохранить в случае ничьей.

Чтобы ms-sql-server сохранить последнюю версию duplicates в порядке RowID, например, вы ms-sql-server можете использовать ORDER BY RowID DESC

Планы выполнения

План duplicate-removal выполнения для этого часто transact-sql проще и эффективнее, чем deduplication в принятом ответе, поскольку deduplication он не требует самостоятельного duplicates соединения.

Как удалить повторяющиеся строки?_duplication

Однако это не sql-server всегда так. Одно из мест, где mssql может быть предпочтительнее tsql решение GROUP BY, - это ситуации, когда deduplication hash aggregate будет предпочтительнее агрегированного deduplication потока.

Решение ROW_NUMBER всегда дает duplicate-data примерно одинаковый план, тогда duplicate как стратегия GROUP BY более гибкая.

Как удалить повторяющиеся строки?_duplicates

Факторы, которые duplicate могут способствовать использованию tsql агрегированного хеш-метода:

  • Нет полезного индекса по столбцам разделения.
  • относительно меньшее количество групп с относительно большим количеством дубликатов в каждой группе

В duplicate-removal крайних вариантах этого второго sql-server случая (если очень мало групп sql-srever с большим количеством дубликатов duplicates в каждой) можно также рассмотреть sql-server возможность простой вставки deduplication строк, которые нужно сохранить tsql в новую таблицу, а затем duplicate TRUNCATE - вставить оригинал и скопировать duplicate их обратно в свести к минимуму duplication ведение журнала по сравнению tsql с удалением очень большой sql-srever части строк.

sql-server

tsql

duplicates

2022-11-19T20:50:22+00:00