如何使用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;
链接地址: http://www.djcxy.com/p/44035.html
上一篇: How do I delete from multiple tables using INNER JOIN in SQL server