我试图了解导致以下情况的原因,也许你可以帮助我:
我有一个类似的查询:
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之前。 有人知道为什么会这样吗?
谢谢, 此致
答案 0 :(得分:3)
基于您未明确排序的任何字段的排序未定义,并且优化器可以在认为导致更好的执行计划时更改排序。如果两个行在order by by字段中具有完全相同的值,则除非您明确地使用具有不同值的另一个字段进行排序,否则不能依赖它们相对于彼此的任何特定顺序。
答案 1 :(得分:0)
你能做到吗
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
答案 2 :(得分:0)
直接从MySQl手册到用户订单,你必须在各个表格中加上括号。
(select field1,fieldDate from table1)
union all
(select field1,fieldDate from table2)
order by fieldDate desc
这不符合SQL标准!您输入的代码应该命令两个表的并集,但令我惊讶的是MySQL具有上述语法。
返回具有相同 fieldDate 的行的顺序可能因每次查询执行而不同。通常这个顺序是相同的,但你不应指望它。如果您想要任何额外的订购状态,请按字段排序。
答案 3 :(得分:-1)
编辑:这个答案是错误的:整个工会的工作顺序。我会把它留在这里以拯救别人的麻烦:)
您的订单仅适用于工会的第二部分。您可以使用子查询通过整个联合工作来生成订单:
select field1,field2,fieldDate
from (
select field1,field2,fieldDate
from table1
union all
select field1,field2,fieldDate
from table2
) SubQueryName
order by fieldDate desc