在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语句中使用该函数?即 有没有一个好的,明确的方法来做这件事?我不会把桌子丢在这里的。