我想知道下面这样的查询是如何工作的。。。。
select * from survey where Year < '2000' order by Year desc limit 1
我的问题是,限制是否适用:
记录整理好后,在这种情况下,我肯定会得到2000年之前的最后一张记录。或
在对记录进行排序之前,在这种情况下,将从自然顺序&然后根本不排序(因为只有一个记录)。
这似乎有点明显,但Amazons的文档似乎没有涵盖这一点。
这似乎有些明显,但亚马逊的文档似乎并不明显盖上它。
Yo,答案肯定是1),否则limit
子句对任何现实世界场景都毫无用处(见下文);此外,它还严重违反了最小意外原则,因为AmazonSimpleDB语法是以SQL为模型的,在这方面可以正常工作,例如,参见PostgreSQL中的LIMIT子句:
使用LIMIT时,最好使用ORDERBY子句将结果行约束为唯一的顺序。否则你会得到查询行的不可预测子集--[…].
例如,否则SimpleDB将不允许正确的分页,这实际上是通过limit
编排的(有关如何使用SimpleDB进行分页的详细信息,请参阅Mocky的回答?),即,如果limit
不服从order by
,您将收到下一个令牌,以防出现更多结果,这将不会产生正确排序的页面。
因此,为了最终提供从亚马逊文档中推断出的一些推理,Count也暗示了预期的行为:
count(*)和select返回的下一个令牌可以互换为只要where子句和order by子句匹配。