Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Delete efface la table au lieu d'erreur

Cela fonctionne comme prévu, en raison de la corrélation entre ColumnA dans la requête interne et externe.

Ce modèle de requête corrélé couramment utilisé est valide

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

Il supprime les entrées TableA qui n'ont pas d'enregistrement dépendant dans TableB.

Il montre que vous pouvez référencer des colonnes TableA dans une requête corrélée. Dans votre requête

delete TableA where ColumnA in (select ColumnA from TableB)

La requête interne produit

  • une ligne pour chaque enregistrement dans TableB
  • une colonne pour chaque ligne, dont la valeur est ColumnA de la requête externe

Ainsi, le DELETE passe par