sql-server - SQL Server:从表中删除
问题描述
我一直在 SQL Server 中遇到这种DELETE FROM FROM
语法,并且不得不提醒自己它的作用。
DELETE FROM tbl
FROM #tbl
INNER JOIN tbl ON fk = pk AND DATEDIFF(day, #tbl.date, tbl.Date) = 0
编辑:为了使大多数评论和建议的答案有意义,原始问题有以下查询:
DELETE FROM tbl
FROM tbl2
解决方案
据我了解,您将使用这样的结构,您可以根据 from 查询的结果限制从第一个表中删除哪些行。但要做到这一点,您需要在两者之间建立相关性。
在您的示例中,没有相关性,这实际上是一种交叉连接,这意味着“对于 tbl2 中的每一行,删除 tbl1 中的每一行”。换句话说,它将删除第一个表中的每一行。
这是一个例子:
declare @t1 table(A int, B int)
insert @t1 values (15, 9)
,(30, 10)
,(60, 11)
,(70, 12)
,(80, 13)
,(90, 15)
declare @t2 table(A int, B int)
insert @t2 values (15, 9)
,(30, 10)
,(60, 11)
delete from @t1 from @t2
结果是一个空的@t1。
另一方面,这将只删除匹配的行:
delete from @t1 from @t2 t2 join @t1 t1 on t1.A=t2.A