Лучший способ удалить повторяющиеся записи (строка) в таблице oracle - PullRequest
0 голосов
/ 25 мая 2020

У нас есть table, в котором есть millions of records. Нам нужно delete duplicate records из table. Как лучше всего это сделать.

То, что я думал, я возьму distinct record в другом table, а затем truncate original table. После этого я insert верну исходную запись.

Я дал этот ответ в interview, но получил отказ. Может ли кто-нибудь предложить лучший способ справиться с этим.

Ответы [ 3 ]

2 голосов
/ 25 мая 2020

Это то, что я обычно использую:

delete from your_table a
where a.rowid > (select min(b.rowid) 
                 from your_table b
                 where a.join_column = b.join_column
                );

Ваш вариант не тот плохой ; он работает нормально, когда вы хотите сохранить часть набора данных таблицы и удалить остальные, поэтому быстрее «сохранить» желаемые значения, усечь таблицу (что быстрее, чем операция удаления) и переместить сохраненные строки назад.

Было бы легче угадать , если бы интервьюер сказал вам, что не так с вашим ответом.


Кроме того, если вам интересно, посмотрите еще несколько способов удаления дубликаты на сайте OraFAQ .

1 голос
/ 25 мая 2020

Не смотрите дальше. Крис Саксон написал отличный блог Как найти и удалить повторяющиеся строки с помощью SQL

1 голос
/ 25 мая 2020

Лучший способ сделать это - использовать коррелированные запросы и ROW_ID, если таблица X имеет огромное количество записей и вы хотите удалить несколько из нее.

...