Удалить дубликаты строк из базы данных 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')
Другие вопросы по тегам