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

Другой возможный способ сделать 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-data произвольно, какую строку sql-srever сохранить в случае ничьей.

Чтобы duplicate-data сохранить последнюю версию duplicate-removal в порядке RowID, например, вы tsql можете использовать ORDER BY RowID DESC

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

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

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

Однако это не duplicate-data всегда так. Одно из мест, где duplicate может быть предпочтительнее duplicates решение GROUP BY, - это ситуации, когда duplicate hash aggregate будет предпочтительнее агрегированного duplicate-removal потока.

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

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

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

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

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

sql-server

tsql

duplicates

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