当前位置: 首页 > 面试题库 >

如何在SQL Server中使用INNER JOIN从多个表中删除

乐正玺
2023-03-14
问题内容

在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 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;

显然,您可以执行“已删除输出”。如果您需要在第三张表上加入某些内容,也可以在第二个删除上使用。

作为附带说明,您也可以在插入语句上执行insert。,在更新语句上同时进行insert。和Deleted。*。

编辑: 另外,您是否考虑过在table1上添加触发器以从table2 + 3中删除?您将处于隐式事务内,并且还将具有“插入的”和“删除的”伪表。



 类似资料:
  • 问题内容: 我试图一次从几个表中删除。我做了一些研究,并提出了 但是,我收到此错误 未捕获的Database_Exception [1064]:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在’p,pa … 附近使用… 我以前从未做过跨表删除操作,所以我现在还没有经验,并且一直坚持下去! 我究竟做错了什么? 问题答案: 在语句中使用a 。 另外,您可以使用…

  • 我正在创建一个脚本,用于将一个参数传入MySQL查询,然后执行该MySQL查询以从多个表中删除多条记录。 现在我遇到了一个问题,我需要为每个单独的表创建多个文件。是否有一种方法可以在一个文件中执行每个MySQL查询,而不是为每个查询创建多个文件? 以下是我创建的代码:

  • 问题内容: 使用分区时,通常需要一次删除所有分区。 然而 不起作用。(不考虑使用通配符)。 有没有一种优雅的方法(易于记忆),可以在一个命令中使用通配符删除多个表? 问题答案: 使用逗号分隔的列表: 如果您确实需要脚枪,这可以做到:

  • 问题内容: 我正在尝试使用SQL从连接在一起的多个表中删除多行。 表A连接到表B表B连接到表C 我想删除表B和C中与表A中的一行相对应的所有行 问题答案: 好吧,如果您使用过InnoDB表,则可以使用外键设置级联删除,这将自动完成所有操作。但是,如果您出于某种原因使用MyISAM,则只需使用多表DELETE即可:

  • **瓷砖可能不正确** 在不手工列出表名的情况下,我是否可以使用一个函数获取表名,然后在delete语句中使用该函数?即 有没有一个好的,明确的方法来做这件事?我不会把桌子丢在这里的。