【发布时间】:2019-03-12 02:41:40
【问题描述】:
正如标题所说,我一直在运行此命令以从表中删除一些记录,但我注意到如果我之前运行查询选择 TOP(X) 记录,它并没有删除列出的相同记录。
DELETE 命令不应该遵循与SELECT 相同的默认顺序吗?如果不是,为什么?
我不知道这是否重要,但这是我正在运行的删除命令:
DELETE TOP (100000) t
FROM Ticket AS t
LEFT JOIN Series s on t.SeriesId = s.id
LEFT JOIN Payment p on t.id = p.TicketId
WHERE s.EndDate <= DATEADD(MONTH, -1, GETDATE()) AND t.ExportDate is null AND p.TicketId is null
对于选择,只需将第一行替换为SELECT TOP(100000) t.*
【问题讨论】:
-
不。没有“默认排序”。如果您未指定
ORDER BY,则任何订购都是有效的。指定删除顺序的方法是将选择放入具有确定性order by的 CTE,然后从 CTE 中删除 -
表中的记录以优化其存储和检索的方式存储到磁盘。而已。它不关心记录的顺序,除非您指定 ORDER BY 子句。
-
为什么是
LEFT JOIN Series s?无论如何,WHERE s.EndDate使其成为内部连接 -
规则一:如果您要使用“TOP”,请始终使用“ORDER BY”。总是。
标签: sql-server