Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Delete czyści tabelę zamiast błędów

Działa to zgodnie z oczekiwaniami, ze względu na korelację między Kolumną A w zapytaniu wewnętrznym a zewnętrznym.

Ten powszechnie używany wzorzec skorelowanego zapytania jest prawidłowy

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

Usuwa wpisy w Tabeli A, które nie mają zależnego rekordu w Tabeli B.

Pokazuje, że możesz odwoływać się do kolumn TableA w skorelowanym zapytaniu. W zapytaniu

delete TableA where ColumnA in (select ColumnA from TableB)

Wewnętrzne zapytanie produkuje

  • jeden wiersz na każdy rekord w Tabeli B
  • jedna kolumna na każdy wiersz, której wartością jest KolumnaA z zewnętrznego zapytania

Tak więc DELETE przechodzi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aby znaleźć następny dzień roboczy

  2. Jak usunąć zduplikowane rekordy w tabeli?

  3. T-SQL Usuwa wszystkie wiersze z tabeli, gdy podzapytanie jest zniekształcone

  4. Dlaczego SQL Server 2008 blokuje SELECT przy długich transakcjach INSERT?

  5. SQL Server:usuń ograniczenie FK, które nie jest kluczem obcym