gpt4 book ai didi

sql - 等值的 DESC 突然改变

转载 作者:行者123 更新时间:2023-12-04 22:11:09 24 4
gpt4 key购买 nike

我有一个获取两行的查询 -

SELECT tb.type,
tb.value,
tb.comp,
tb.start_date,
tb.end_date,
tb.newdays,
tb.modif_date
FROM table_name tb
WHERE tb.start_date <= sysdate
AND tb.end_date >= sysdate
AND tb.VALUE='ABC'
ORDER BY tb.value,
tb.type DESC

现在这以前用于产生这种形式

+------+-------+------+------------+-----------+---------+------------------+
| TYPE | VALUE | COMP | START_DATE | END_DATE | NEWDAYS | MODIF_DATE |
+------+-------+------+------------+-----------+---------+------------------+
| N | ABC | ** | 10-Mar-16 | 31-Dec-99 | 4 | 10/03/2016 10:05 |
| N | ABC | ** | 07-Mar-16 | 31-Dec-99 | 6 | 07/03/2016 23:23 |
+------+-------+------+------------+-----------+---------+------------------+

最近我注意到现在的输出是这样的(上面有 6 个,下面有 4 个)

+------+-------+------+------------+-----------+---------+------------------+
| TYPE | VALUE | COMP | START_DATE | END_DATE | NEWDAYS | MODIF_DATE |
+------+-------+------+------------+-----------+---------+------------------+
| N | ABC | ** | 07-Mar-16 | 31-Dec-99 | 6 | 07/03/2016 23:23 |
| N | ABC | ** | 10-Mar-16 | 31-Dec-99 | 4 | 10/03/2016 10:05 |
+------+-------+------+------------+-----------+---------+------------------+

如果我删除 ORDER BY CLAUSE tb.type。结果又恢复正常了(4在上)

困惑 -
1. 为什么/怎么突然变了?
2. 即使 tb.type 相等,即 TYPE='N',为什么数据库对其进行排序/排序?由于两个值相等,因此不应发生排序,对吗?

*EDIT - 如果我删除 tb.type,排序将再次恢复正常。然而,当我把它放回去时,排序将 6 放在最前面。 *

This means the sorting is not arbitrary.

我的分析 -当两个值相等时,通常使用它在索引结构中的存储方式。但是索引的最后一个 DDL 日期(重建日期)是在 2015 年。这意味着索引仍然是相同的。

知道为什么会这样吗?

最佳答案

一般的 SQL —— 尤其是 Oracle —— 不实现稳定排序。稳定排序是一种保留记录原始顺序的排序。

SQL 表和结果集没有固有的顺序。如果您想要稳定性,order by 中的键(组合)需要是唯一的,而不管表上的任何索引如何。

关于sql - 等值的 DESC 突然改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872910/

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