Как лучше всего удалить повторяющиеся строки из довольно большой таблицы? (Например, более 300 000 строк)
Конечно, строки не будут идеальными дубликатами из-за существования поля идентификации.ROWID
MyTable
-----------
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Оригинальный вопрос: как удалить повторяющиеся строки?
Прежде всего, вам нужно решить, каковы будут ваши критерии двуличия. Например, я хочу проверить, повторяются ли вместе второй (col1) и третий (col2) столбцы.
дата теста первая
Затем запрос для получения дубликатов на основе предопределенных критериев.
С помощью этого запроса вы можете легко найти дубликаты, более важными, чем сам запрос, являются критерии, которые вы используете.
Если вы хотите устранить повторяющиеся данные (очевидно, рекомендуется сделать резервную копию или инкапсулировать все в транзакцию), вы можете сделать следующее:
Один из вариантов — использовать временные таблицы. Для этого:
Код (я его не тестировал) будет примерно таким:
принимая во внимание, что дублирование будет происходить в других столбцах и что есть столбец, который, если бы он был другим (RowID), был бы только пронумерован с помощью функции ROW_NUMBER, разделен на все столбцы, кроме RowID, и удалить эти записи, и в этом случае нумерация должна быть> 1, я не знаю, лучший ли это способ, но это был бы вариант:
Следующая форма также работает, и ее полезно использовать, если нет столбца для различения записей (в случае, если вы укажете, у него был RowId). Но я не знаю, зависит ли это от версии SQL Server, у меня это сработало в SQL Server 2012:
Привет друзья! Прилагаю разработанный мною Transact, который работает без дополнительных таблиц. Я не удаляю повторяющиеся строки, но можно изменить строку обновления на строку удаления.
Я надеюсь, что это служит вам. Хуан Карлос