为什么不允许DELETE TOP而不允许ORDER BY ?



为什么允许DELETE TOP而不允许ORDER BY ?为什么不允许DELETE TOP with ORDER BY ?

这不是违背了不应该有"自然的"吗?在SQL行顺序?

解决方法是

DELETE FROM table WHERE id IN (
SELECT TOP n id FROM table WHERE ... ORDER BY ...)

类似的问题,对于UPDATE TOP (n), ORDER BY是不允许的。为什么?

为什么不呢:因为只有在非常特殊的情况下才有意义。DELETEUPDATE没有结果。ORDER BYTOP仅在批处理场景中有意义。不管出于什么原因,选择行的工作是SELECT的工作。在ANSI SQL中,选择要删除的一批行的工作是SELECT子查询的工作

SQL Server的DELETE TOP或MySQL的DELETE ... LIMIT是扩展。PostgreSQL不允许在DELETE中使用LIMIT或FETCH FIRST

这并不意味着有某种顺序。服务器可以自由地以最便宜的方式返回数据,TOP适用于这些结果。如果服务器决定并行化查询或使用不同的连接策略,则顺序可以改变。

在其他数据库中,您也可以使用LIMITFETCH FIRST而不使用ORDER BYLIMIT,FETCH FIRSTTOP不属于ORDER BY子句

在MySQL中,LIMIT可以在没有ORDER BY的情况下应用。从文档示例中:

SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows

PostgreSQL允许LIMIT和ANSI SQLFETCH FIRST,例如:

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY;

至于为什么,UPDATE和DELETE不会产生结果,所以ORDER BY没有意义。

最新更新