我有一个带有UPDATE
子句的ORDER BY
查询。我已使用相同的SELECT
条款将同一查询复制到ORDER BY
,并且我得到了不同的结果。
更新查询:
UPDATE t_locks
SET server_guid = 11028790,
lock_time_to_live = TIMESTAMPADD(MINUTE,5,NOW())
WHERE
(server_guid IS NULL OR NOW() > lock_time_to_live OR lock_time_to_live IS NULL)
AND lock_key_id = 3
ORDER BY flag DESC, last_time_processed ASC
LIMIT 10;
选择查询:
SELECT * FROM t_locks
WHERE
(server_guid IS NULL OR NOW() > lock_time_to_live OR lock_time_to_live IS NULL)
AND lock_key_id = 3
ORDER BY flag DESC, last_time_processed ASC
LIMIT 10;
注意:我没有使用此UPDATE
检查SELECT
的结果。
怀疑:除了ORDER BY
查询中的正常SELECT
之外,它还添加了第3个参数ID
。我希望UPDATE
做同样的事情。
答案 0 :(得分:0)
SQL数据库不会向order by
添加任何内容。有充分理由,SQL没有实现稳定的排序。好的理由是表表示无序集,因此排序顺序没有基线。如果您按常数订购,则无法保证连续两次获得相同的订单。领带可以按任何顺序出现。他们这样做。
您刚学到的内容是基于flag
和last_time_processed
的重复内容。从您的问题中不清楚您是否有11个或更多具有相同值,或者只有两个位于select
的位置10和11,而update
位于11和10。
事实证明,SQL Server documentation在解释这个问题(在分页的上下文中)比MySQL做得更好:
在查询请求之间实现稳定的结果。 。 。必须满足以下条件:
。 。
- ORDER BY子句包含保证唯一的列或列组合。
醇>