SQL Server - 基于表连接条件删除记录的快速方法

Cha*_*obs 1 sql t-sql sql-server

通常我会截断这样的数据:

truncate table DST.BreaksDST
Run Code Online (Sandbox Code Playgroud)

但是,我只需要删除其他表的连接包含'DST'源的数据

我的SELECT陈述如下:

select 
    dstid, dst.breakid 
from 
    DST.BreaksDST dst 
join 
    base.breaks b on dst.BreakId = b.BreakId
where 
    b.source = 'DST'
Run Code Online (Sandbox Code Playgroud)

所以我知道如果我使用类似的东西 DELETE .... IN (select dst.breakid .....)

那会很慢,对吧?

什么是更好的方法?

Luk*_*zda 5

你可以使用DELETE [FROM] ... FROM JOIN:

DELETE dst
FROM DST.BreaksDST dst 
JOIN base.breaks b
   ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';
Run Code Online (Sandbox Code Playgroud)

db <>小提琴演示

请注意,double FROM不是错误:

DELETE FROM dst
FROM BreaksDST dst 
JOIN breaks b
   ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';
Run Code Online (Sandbox Code Playgroud)