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

时间:2018-10-18 20:11:25

标签: sql sql-server tsql

通常我会这样截断数据:

truncate table DST.BreaksDST

但是,我只需要删除连接到另一个表的数据中包含“ DST”源的数据

我的SELECT语句如下:

select 
    dstid, dst.breakid 
from 
    DST.BreaksDST dst 
join 
    base.breaks b on dst.BreakId = b.BreakId
where 
    b.source = 'DST'

所以我知道,如果我使用DELETE .... IN (select dst.breakid .....)

那会非常慢,对吧?

还有什么更好的方法?

1 个答案:

答案 0 :(得分:5)

您可以使用DELETE [FROM] ... FROM JOIN

DELETE dst
FROM DST.BreaksDST dst 
JOIN base.breaks b
   ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';

db<>fiddle demo

请注意,double FROM不是错误:

DELETE FROM dst
FROM BreaksDST dst 
JOIN breaks b
   ON dst.BreakId = b.BreakId
WHERE b.source = 'DST';