Удалить дубликаты строк из базы данных Oracle с одним условием
Я правильно понял сценарий, но время выполнения составляет около 5 минут, чтобы удалить 11320860 записей. Есть ли альтернативный способ написания этого запроса, чтобы сократить время выполнения?
Сценарий такой же комбинации записей может иметь как E, так и A записей. И код пытается удалить записи A и E, если существует хотя бы одна запись E для одной и той же комбинации.
Delete from tableA u
WHERE EXISTS
(Select 1 from tableA w
WHERE w.a = u.a
AND w.b = u.b
AND w.c = u.c
AND w.d = u.d
AND w.flag ='E' ); - Del about 11320860 records in 4 Mins
1 ответ
Так что вам это нужно, я думаю:
Delete from tableA u
WHERE u.flag in ('A', 'E')
and EXISTS
(Select 1 from tableA w
WHERE w.a = u.a
AND w.b = u.b
AND w.c = u.c
AND w.d = u.d
AND w.flag ='E')
Этот способ также должен работать:
delete from tableA
where flag in ('A', 'E')
and (a, b, c, d) in
(select a, b, c, d
from tableA
where flag = 'E')