Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để xóa khỏi nhiều bảng bằng INNER JOIN trong máy chủ SQL

Bạn có thể tận dụng bảng giả "đã xóa" trong ví dụ này. Một cái gì đó như:

begin transaction;

   declare @deletedIds table ( id int );

   delete from t1
   output deleted.id into @deletedIds
   from table1 as t1
    inner join table2 as t2
      on t2.id = t1.id
    inner join table3 as t3
      on t3.id = t2.id;

   delete from t2
   from table2 as t2
    inner join @deletedIds as d
      on d.id = t2.id;

   delete from t3
   from table3 as t3 ...

commit transaction;

Rõ ràng là bạn có thể thực hiện một 'đầu ra đã bị xóa.' trong lần xóa thứ hai, nếu bạn cần thứ gì đó để tham gia vào bảng thứ ba.

Lưu ý thêm, bạn cũng có thể chèn. * Vào câu lệnh chèn và cả chèn. * Và xóa. * Trên câu lệnh cập nhật.

CHỈNH SỬA: Ngoài ra, bạn đã cân nhắc thêm trình kích hoạt trên table1 để xóa khỏi table2 + 3 chưa? Bạn sẽ ở bên trong một giao dịch ngầm và cũng sẽ có "được chèn. " và "đã bị xóa. "có sẵn bảng giả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một hàm đa giá trị bảng sao kê (MSTVF) trong SQL Server

  2. Công cụ tốt nhất để so sánh hai cơ sở dữ liệu SQL Server (lược đồ và dữ liệu) là gì?

  3. Cách kết hợp ngày từ một trường với thời gian từ một trường khác - MS SQL Server

  4. Không thể kết nối với SQL Server bằng PHP

  5. XÓA hàng loạt trên SQL Server 2008 (Có bất kỳ điều gì giống như Sao chép hàng loạt (bcp) để xóa dữ liệu không?)