Ако нямате право да променяте таблиците, можете да погледнете EXISTS
оператор.
Това ще ви позволи да изтриете редове от таблица само ако заявката вътре в EXISTS
върне поне 1 резултат. Можете да го използвате, за да проверите зависимостите.
Можете да напишете 3 заявки:
DELETE C c
WHERE EXISTS (SELECT 1
FROM B b
WHERE c.b = b.b
AND EXISTS (SELECT 1
FROM A a
WHERE a.a = b.a
AND ... ));
DELETE B b
WHERE EXISTS (SELECT 1
FROM A a
WHERE a.a = b.a
AND ...);
DELETE A a
WHERE ...
Първият ще се грижи за записа в C
който препраща към записи в B
който препраща към записи в A
които искате да изтриете.
След това можете да премахнете записи от B
тъй като няма повече зависимости в C
.
Накрая можете да изтриете записи от A
използвайки същата логика.