SQL Server—基于表联接条件删除记录的快速方法
通常我会像这样截断数据:SQL Server—基于表联接条件删除记录的快速方法,sql,sql-server,tsql,Sql,Sql Server,Tsql,通常我会像这样截断数据: truncate table DST.BreaksDST select dstid, dst.breakid from DST.BreaksDST dst join base.breaks b on dst.BreakId = b.BreakId where b.source = 'DST' 但是,我只需要删除与另一个表的连接中包含“DST”源的数据 我的SELECT语句如下所示: truncate table DST.B
truncate table DST.BreaksDST
select
dstid, dst.breakid
from
DST.BreaksDST dst
join
base.breaks b on dst.BreakId = b.BreakId
where
b.source = 'DST'
但是,我只需要删除与另一个表的连接中包含“DST”源的数据
我的SELECT语句如下所示:
truncate table DST.BreaksDST
select
dstid, dst.breakid
from
DST.BreaksDST dst
join
base.breaks b on dst.BreakId = b.BreakId
where
b.source = 'DST'
所以我知道如果我使用像DELETE这样的东西。。。。在中选择dst.breakid
那会很慢,对吧
有什么更好的方法吗?您可以使用DELETE[FROM]。。。从加入:
请注意,doubleFROM不是一个错误:
DELETE FROM dst
FROM BreaksDST dst
JOIN breaks b
ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';
您可以使用DELETE[FROM]。。。从加入:
请注意,doubleFROM不是一个错误:
DELETE FROM dst
FROM BreaksDST dst
JOIN breaks b
ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';
作为参考,这是要使用的语法,您可以用更新dst SET dst.x=b.y替换DELETE dst,并使用相同的连接语法进行更新。@JoelCoehoorn实际上是双精度的。但感谢您的编辑,我使其更加明确。作为参考,这是要使用的语法,您可以用更新dst SET dst.x=b.y替换删除dst,并使用相同的连接语法进行更新。@JoelCoehoorn实际上是有意使用的。但是谢谢你的编辑,我让它更明确了。这真的取决于你删除了多少表。如果删除的表的百分比很高,则可以更快地选择要保留在新表中的记录,删除原始表并重命名新表。如果不是,那么DELETE-FROM-internal-JOIN语法工作得很好,这实际上取决于要删除的表的数量。如果删除的表的百分比很高,则可以更快地选择要保留在新表中的记录,删除原始表并重命名新表。如果不是,则DELETE-FROM-internal-JOIN语法工作正常