gpt4 book ai didi

mysql - 带有 order 子句的相同查询,相同的数据集,但结果不同

转载 作者:行者123 更新时间:2023-11-29 10:22:06 24 4
gpt4 key购买 nike

我正在通过编写一个测试程序来测试我的应用程序(ERP 系统),该测试程序将执行 30 个步骤的固定场景,如下所示

//pseudo code(PHP)
public function runScenario1Test(){
V2_1Tester::resetDatabase();
V2_1Tester::insert60Companies();
V2_1Tester::insert2000Items();
V2_1Tester::insert100Purchases();
V2_1Tester::insert100Sales();

//do some other stuff

V2_1Tester:checkResults();
}

虽然每次我运行相同代码、相同数据、所有输入都相同的测试,但有时我会得到不同的结果!!!

我的头快要爆炸了,经过 4 天的调查、流泪,甚至晚上做了糟糕的数据库梦,结果发现这个错误是在一个有时会返回不同结果的查询中。是这样的

+-----+--------------+-----------+------+--------+
| ID | date | direction | col3 | col4 |
+-----+--------------+-----------+------+--------+
| 1 | 2018-03-03 | in | 6 | 100.50 |
| 2 | 2018-03-03 | in | 6 | 350.75 |
+-----+--------------+-----------+------+--------+
-- more ~ 3000 rows

$query = "SELECT * FROM table ORDER BY date, direction, col3";

此查询有时返回 1,然后返回 2,有时返回 2,然后 1。

我通过添加额外的订购级别 ID 修复了该查询

$query = "SELECT * FROM table ORDER BY date, direction, col3, ID";

但我不明白为什么 MySQL 会这样?,换句话说,对于所有排序依据列都相同的行,MySQL 将遵循哪些规则?为什么会发生变化?

最佳答案

在 SQL 中,order by 并不稳定。这意味着当键相同时,排序可以是任意顺序。

这其实是显而易见的。 SQL 表表示无序集。除非列指定顺序,否则没有顺序。

因此,您通过将 id 包含为最终键来完成正确的操作。这确保了顺序定义良好,因为没有重复的键。

关于mysql - 带有 order 子句的相同查询,相同的数据集,但结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49079124/

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