如何使用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

    下一篇: How to do a FULL OUTER JOIN in MySQL?