我想知道如下查询将如何运作....
select * from survey where Year < '2000' order by Year desc limit 1
我的问题是,限制是否适用:
在对记录进行排序后,在这种情况下,我肯定会在2000年之前获得最后一条记录。或者......
在对记录进行排序之前,在这种情况下,将从自然顺序中选择一条记录。然后根本没有排序(因为只有一个记录)。
这似乎有些明显,但亚马逊的文档似乎并没有涵盖它。
答案 0 :(得分:1)
哟,答案肯定是1),否则这似乎有些明显,但亚马逊的文档似乎并不存在 覆盖它。
limit
条款对任何真实场景都没有用(见下文);此外,它会严重违反Principle of least suprise,因为Amazon SimpleDB语法是在SQL之后建模的,在这方面可以正常工作,例如, LIMIT clause in PostgreSQL:
使用LIMIT时,最好使用ORDER BY子句 将结果行限制为唯一的顺序。否则你会得到 查询行的不可预测的子集 - [...]。
例如,否则 SimpleDB 将不允许正确的分页,这通过limit
精心编排(有关How to do paging with simpledb?的详细信息,请参阅Mocky的答案),即你将会如果limit
不遵守order by
,则会收到下一个令牌,以防有更多结果,这将无法正确排序页面。
因此,为了最终提供从亚马逊的文档中推断出的一些推理,Count也暗示了预期的行为:
count(*)和select返回的下一个标记可互换为 只要where和order by子句匹配。