【问题标题】:How SQL rearranges query result when ordered by date where all the columns have same date当所有列都具有相同日期的按日期排序时,SQL 如何重新排列查询结果
【发布时间】:2016-04-08 11:00:38
【问题描述】:

InSQL,我有一个有 2 行的表,其中有一个日期列、一个整数列和一个 varchar 列。日期字段和整数字段的两行值完全相同,只有 varchar 字段不同。数据如下

no   date     message
1   1/1/2000    a
1   1/1/2000    b

当我查询时

从 table_name 中按 no 顺序搜索 *, 查询结果与表中已有的相同

no   date     message
1   1/1/2000    a
1   1/1/2000    b

也就是说,当我按整数值排序时,我可以以相同的顺序检索数据

但是当我尝试按日期字段排序时(完全相同) 然后我就变成这样了

no   date     message
1   1/1/2000    b
1   1/1/2000    a

它重新排列行。为什么会发生这种情况

【问题讨论】:

    标签: mysql date sql-order-by


    【解决方案1】:

    “稳定排序”是一种在键具有相同值时保留正在排序的数据中行的原始顺序的排序(Wikipedia 有一个专门介绍这些算法的页面)。所以,你问的是 SQL 中的排序是否稳定(或者为什么不稳定)。

    答案很明显:SQL 中的排序是不稳定的。为什么这很明显? SQL 表代表 无序 集合。因此,表中没有要保留的顺序。

    如果您想保留“原始排序”,则需要包含一个额外的唯一键来指定原始排序。如果您有一个自动递增的主键,那么这将是一个自然键添加到您的order byorder by date, no

    【讨论】:

    • 为什么它保留类型不是日期的列的顺序以及为什么它不保留日期类型的列
    • @user2971184 。 . .它不会永远保留绑定键的顺序。有时产生的顺序可能是您所期望的;这是一个巧合。
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-10-14
    • 2016-06-09
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多