Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Delete cancella la tabella invece di generare errori

Funziona come previsto, a causa della correlazione tra ColumnA nella query interna e quella esterna.

Questo modello di query correlato comunemente utilizzato è valido

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

Rimuove le voci TableA che non hanno un record dipendente in TableB.

Mostra che puoi fare riferimento alle colonne di TableA in una query correlata. Nella tua richiesta

delete TableA where ColumnA in (select ColumnA from TableB)

La query interna sta producendo

  • una riga per ogni record in TableB
  • una colonna per ogni riga, il cui valore è ColonnaA dalla query esterna

Quindi DELETE passa attraverso