Удаление дублирующихся строк от таблицы в Oracle

Событие должно быть actions_intent_PERMISSION с «s» в конце «action».

Простая и распространенная опечатка.

135
задан Bill the Lizard 13 March 2019 в 12:19
поделиться

4 ответа

Используйте rowid псевдостолбец.

DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);

, Где column1, column2, и column3 составляют ключ идентификации для каждой записи. Вы могли бы перечислить все свои столбцы.

274
ответ дан 23 November 2019 в 23:43
поделиться

Необходимо сделать маленький pl/sql блок с помощью курсора для цикла и удалить строки, которые Вы не хотите сохранять. Например:

declare
prev_var my_table.var1%TYPE;

begin

for t in (select var1 from my_table order by var 1) LOOP

-- if previous var equal current var, delete the row, else keep on going.
end loop;

end;
3
ответ дан 23 November 2019 в 23:43
поделиться

От DevX.com :

DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3...) ;

, Где column1, column2, и т.д. является ключом, Вы хотите использовать.

11
ответ дан 23 November 2019 в 23:43
поделиться
DELETE FROM tablename a
      WHERE a.ROWID > ANY (SELECT b.ROWID
                             FROM tablename b
                            WHERE a.fieldname = b.fieldname
                              AND a.fieldname2 = b.fieldname2)
11
ответ дан 23 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: