【发布时间】:2020-01-08 09:46:37
【问题描述】:
我计划在没有任何适当数据列用于 order-by 子句的选择查询中使用 ROW_NUMBER() OVER (ORDER BY (SELECT NULL))。
一般来说,如果我将ORDER BY 与有效的列数据一起使用,那么每次执行时ROW_NUMBER() 的排序将完全相同。通过使用ORDER BY (SELECT NULL),ROW_NUMBER() 的顺序是什么,会随着每次执行而改变吗?
如果顺序没变(我这边测试,顺序没变),好用吗?
【问题讨论】:
-
您期望某个顺序似乎暗示实际上是您心中的某个顺序。您可能希望将示例数据添加到您的问题中。不确定与
ORDER BY (SELECT NULL)的合同,但我猜你不应该依赖它。 -
我在数据方面没有订单。我使用 ROW_NUMBER() 函数通过使用行号顺序分批(一次 500 个)选择数据的唯一原因。
-
好吧,它要么使用某种顺序,要么不使用;但这些都不重要,因为在任何一种情况下,随着基础数据的变化,每组返回的前 N 条记录也会发生变化。
-
在我的情况下,每天整个表都替换为新数据,因为我不能使用 ORDER BY 并且想使用 ROW_NUMBER()OVER () 函数通过使用行号来批量选择记录。如果 ORDER BY (SELECT NULL) 每次执行都给出相同的顺序,所以我的代码可以选择数据而不必担心重复
-
在 MySql 8.0 中,
ORDER BY不是必需的。所以你可以做row_number() over ()。row_number() over (order by (select null))是 MS Sql Server 的一种解决方法,它需要在 ROW_NUMBER 中使用非文字ORDER BY。
标签: mysql sql sql-order-by