2017-02-05 14 views
0

私はこのクエリを持っています。同じMYSQLクエリですが、異なるサーバで異なる結果が表示される

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

"DESC"は自分のローカルサーバーで動作しますが、別のサーバーでは動作しません。 しかし、私はちょうどこのように書く:

SELECT * FROM private_messages ORDER BY id DESC 

両方のサーバーで動作します。何が原因でしょうか?

+0

新しいバージョンのMySQLでは、サブクエリで 'ORDER BY'が無視されることがあります。 –

+0

うわー。バグですか?私は何をすることができますか? – babyleans

答えて

0

コメントするには長すぎます..

これはバグではありません。これは、hereを文書は次のとおり

のMySQL 5.7.6のように、オプティマイザはORDER BY句を伝播させることによって、外側問合せブロック に導出表またはビュー参照し ORDER BY句の伝播を扱う以下の条件であれば適用: 外部クエリはグループ化または集計されません。 DISTINCT、HAVING、またはORDER BYを指定していません( )。この導出された表またはビューは、FROM節の唯一のソースとして 参照を持ちます。そうでない場合、 オプティマイザはORDER BY句を無視します。 MySQL 5.7.6より前では、 オプティマイザはORDER BYを伝播しましたが、それは無関係であったり、 で無効なクエリが発生しました。

ただし、あなたの質問には当てはまりません。 SQL規格に準拠した - - 順不同だから私はある(FROM句すぎでサブクエリ)2番目のサーバがLIMIT

A「テーブル」なしでサブクエリ内の任意ORDER BY ingnoreする縫い目MariaDBを実行していると思います行のセット。テーブルの行(またはFROM句の サブクエリ)の行は、特定の順序ではありません。つまり、 を指定したORDER BY句をオプティマイザが無視できるのは です。実際には、SQL標準では、ORDER BY 句がこのサブクエリに表示されることも許可されていません(ORDER BY ... LIMIT ...結果を変更します)。

FROM句のサブクエリを の未定義の未定義順序の行のセットとして処理し、ORDER BYを 最上位のSELECTに配置する必要があります。

Why is ORDER BY in a FROM Subquery Ignored?

だから、あなたができる最善のは、ちょうど外側のクエリにORDER BY句を移動することです。または、サブクエリをまったく使用しないでください。

+0

ありがとうございます。しかし、クエリはより複雑なクエリの一部です。そして、はい、それはMariaDBです。私は 'LIMIT'だけを使うつもりだと思う。 – babyleans

+0

@babyleans行番号や階数などを計算しようとしていますか? –

+0

私は 'order by'と 'group by'を同時にしようとしています。 – babyleans

関連する問題