如何使用SQL Server中的INNER JOIN从多个表中删除
在MySQL中,您可以使用该语法
DELETE t1,t2 
FROM table1 AS t1 
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
我如何在SQL Server中做同样的事情?
在本例中,您可以利用“已删除”伪表。 就像是:
begin transaction;
   declare @deletedIds table ( id int );
   delete t1
   output deleted.id into @deletedIds
   from table1 t1
    join table2 t2
      on t2.id = t1.id
    join table3 t3
      on t3.id = t2.id;
   delete t2
   from table2 t2
    join @deletedIds d
      on d.id = t2.id;
   delete t3
   from table3 t3 ...
commit transaction;
显然你可以做一个'输出删除'。 第二次删除,如果你需要加入第三张表的话。
另外,还可以在插入语句中插入。*,并在更新语句中插入。*和deleted。*。
编辑:另外,你有没有考虑在table1上添加一个触发器以从table2 + 3中删除? 您将处于隐式事务中,并且还将具有“插入”。 和“删除”。 伪表可用。
您始终可以设置表关系上的级联删除。
您可以将多个删除操作封装在一个存储过程中。
您可以使用交易来确保一个工作单元。
您可以在SQL Server的DELETE中的FROM子句中使用JOIN语法,但您仍然只从第一个表中删除,并且它是专有的Transact-SQL扩展,它是子查询的替代方法。
从这里的例子:
 -- Transact-SQL extension
 DELETE 
   FROM Sales.SalesPersonQuotaHistory 
     FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN 
          Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID
    WHERE sp.SalesYTD > 2500000.00;
上一篇: How do I delete from multiple tables using INNER JOIN in SQL server
