完全相同的MYSQL查询但在不同服务器上的结果不同

时间:2017-02-05 23:26:13

标签: mysql

我有这个问题。

SELECT * FROM (SELECT * FROM private_messages ORDER BY id DESC) a

“DESC”在我的本地服务器上运行,但在其他服务器上不起作用。 但是,如果我只是这样写:

SELECT * FROM private_messages ORDER BY id DESC

它适用于两台服务器。会导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

这对评论来说太长了。

这不是一个错误。它记录了here

  

从MySQL 5.7.6开始,优化器处理ORDER BY的传播   派生表中的子句或对外部查询块的视图引用   如果满足以下条件,则通过传播ORDER BY子句:   外部查询未分组或聚合;没有说明   DISTINCT,HAVING或ORDER BY;并具有此派生表或视图   引用作为FROM子句中的唯一源。否则,   优化器忽略ORDER BY子句。在MySQL 5.7.6之前,   优化器总是传播ORDER BY,即使它是无关紧要的   导致查询无效。

然而,您的查询并非如此。所以,我猜你的第二台服务器正在运行MariaDB,它接近在没有ORDER BY

的子查询中的任何LIMIT
  

A" table" (以及FROM子句中的子查询)是 - 根据   SQL标准 - 一组无序行。表中的行(或表中的行)   FROM子句中的子查询)没有任何特定的顺序。那' S   为什么优化器可以忽略您拥有的ORDER BY子句   指定。实际上,SQL标准甚至不允许ORDER BY   要出现在此子查询中的子句(我们允许它,因为ORDER BY ...   LIMIT ...更改结果,行集,而不仅仅是它们的顺序。)

     

您需要将FROM子句中的子查询视为一组行   一些未指定和未定义的顺序,并将ORDER BY放在   顶级SELECT。

Why is ORDER BY in a FROM Subquery Ignored?

最好的办法就是将ORDER BY子句移动到外部查询。或者根本不使用子查询。