为什么我在使用(select * vs select uuid)时会得到不同的结果,然后在结尾处按顺序排序?

时间:2016-06-28 02:17:12

标签: mysql

我在MySQL中有两个select语句。第一:

select o.uuid
from wmsStockInBill o
where 1=1 and o.orguuid = '4028c08d555dfd9901555e1287f50002'
order by o.inDate desc`

我得到以下结果

uuids

第二

select *
from wmsStockInBill o
where 1=1 and o.orguuid = '4028c08d555dfd9901555e1287f50002'
order by o.inDate desc

结果的uuid列是

uuid2

我已经使用order by了,为什么两个uuid列的顺序不同?我认为MySQL必须有一些原则来从表中选择结果,它是什么?

1 个答案:

答案 0 :(得分:1)

您获得不同uuid值的原因是因为您有多行具有相同的最大值inDate

在MySQL(和一般的SQL)中,排序不是稳定。当键值相等时,稳定排序会保留行的顺序。为什么关系数据库中的排序不稳定?简单:表格代表无序集合,因此没有已知的排序。

解决方案是包含一个额外的唯一键作为最后一个排序键。在您的情况下,可能是:

order by o.inDate desc, uuid