我想知道是什么原因导致了下面的问题,也许你可以帮助我:
我有一个查询,比如:
select field1,fieldDate from table1
union all
select field1,fieldDate from table2
order by fieldDate desc另一个像这样的:
select field1,field2,fieldDate from table1
union all
select field1,field2,fieldDate from table2
order by fieldDate desc所以它们基本上是一样的,除了在第二个中,我检索了一个额外的字段。
现在,这两个结果都有不同的排序,但只是针对日期完全相同的情况。例如,有2行(row1,row2)的日期为2009-11-25 09:41:55。对于查询1,row1在row2之前,而对于查询2,row2在row1之前。有人知道为什么会这样吗?
谢谢,致以问候
发布于 2009-12-03 22:20:28
基于您未显式排序依据的任何字段的排序都是未定义的,如果优化器认为这会产生更好的执行计划,则它可以更改排序。给定order by字段中具有完全相同值的两行,除非您显式地按另一个具有不同值的字段排序,否则您不能依赖它们彼此之间有任何特定的顺序。
发布于 2009-12-03 22:05:10
你能做到吗?
select * from ( select
field1,field2,fieldDate, 0 as ordercol from table1
union all select
field1,field2,fieldDate, 1 as ordercol from table2) t1
order by fieldDate desc, ordercol asc发布于 2009-12-03 22:30:36
直接从MySQl手册开始,对于用户order by,您必须将各个表放入括号中。
(select field1,fieldDate from table1)
union all
(select field1,fieldDate from table2)
order by fieldDate desc这不符合SQL标准!您输入的代码应该对两个表的联合进行排序,但令我惊讶的是,MySQL具有上述语法。
对于每次查询执行,返回具有相同fieldDate的行的顺序可能不同。通常情况下,这个顺序是相同的,但你不应该指望它。如果您想要任何额外的排序状态,请使用order by字段。
https://stackoverflow.com/questions/1840008
复制相似问题