gpt4 book ai didi

sql - ORDER BY 和 ROW_NUMBER() 是确定性的吗?

转载 作者:行者123 更新时间:2023-12-03 17:44:42 27 4
gpt4 key购买 nike

几年来,我不时在几个数据库引擎中使用 SQL,但对理论知识知之甚少,所以我的问题对你们中的一些人来说可能非常“菜鸟”。但它现在对我很重要,所以我不得不问。

想象一下具有非唯一列的表 URL status .对于这个问题,假设我们有大量的行并且状态在每条记录中都具有相同的值。

并想象我们执行多次查询:

SELECT * FROM Urls ORDER BY status
  • 我们是否每次都得到相同的行顺序?如果我们添加一些新行会发生什么?它会更改顺序还是将新记录附加到结果的末尾?如果我们没有得到相同的订单 - 在什么条件下取决于这个订单?
  • ROW_NUMBER() OVER (ORDER BY status)将返回与上面查询相同的顺序还是基于不同的排序机制?
  • 最佳答案

    这很简单。如果您想要一个可以依赖的排序,那么您需要在 ORDER BY 中包含足够多的列。子句使得所有这些列的组合对于每一行都是唯一的。其他什么都不能保证。

    对于单个表,您通常可以通过列出“有趣”的列进行排序,然后包括主键列来获得所需的内容。由于 PK 本身保证唯一性,因此整个组合也保证唯一地定义排序,例如如果Urls表的主键是 {Site, Page, Ordinal}那么以下将为您提供可靠的结果:

    SELECT * FROM Urls ORDER BY status, Site, Page, Ordinal

    关于sql - ORDER BY 和 ROW_NUMBER() 是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18613055/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com