Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So löschen Sie alle abhängigen Zeilen

Wenn Sie die Tabellen nicht ändern dürfen, können Sie sich die EXISTS ansehen -Operator.
Sie können Zeilen nur dann aus einer Tabelle löschen, wenn die Abfrage innerhalb des EXISTS gib mindestens 1 Ergebnis zurück. Sie können es verwenden, um Abhängigkeiten zu überprüfen.

Sie können 3 Abfragen schreiben:

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 ...

Der erste kümmert sich um die Aufzeichnung in C die auf Datensätze in B verweist die auf Datensätze in A verweist die Sie löschen möchten.
Dann können Sie Datensätze aus B entfernen da es in C keine Abhängigkeiten mehr gibt .
Schließlich können Sie Datensätze aus A löschen mit der gleichen Logik.