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

SQL Delete löscht die Tabelle, anstatt einen Fehler zu verursachen

Das funktioniert wie erwartet, aufgrund der Korrelation zwischen ColumnA in der inneren Abfrage zur äußeren.

Dieses häufig verwendete korrelierte Abfragemuster ist gültig

DELETE TableA WHERE NOT EXISTS (select * from TableB where TableB.ID=TableA.ID)

Es entfernt TableA-Einträge, die keinen abhängigen Datensatz in TableB haben.

Es zeigt, dass Sie in einer korrelierten Abfrage auf TableA-Spalten verweisen können. In Ihrer Abfrage

delete TableA where ColumnA in (select ColumnA from TableB)

Die innere Abfrage produziert

  • eine Zeile für jeden Datensatz in TableB
  • eine Spalte für jede Zeile, deren Wert ColumnA aus der äußeren Abfrage ist

Das LÖSCHEN geht also durch