आपका ORDER BY
व्युत्पन्न तालिका में सबक्वेरी को MySQL 5.7 में अनदेखा किया जाता है।
देखें https://dev.mysql.com/ doc/refman/5.7/hi/व्युत्पन्न-तालिका-अनुकूलन.html
आपकी बाहरी क्वेरी में JOIN और GROUP BY है, इसलिए यह ORDER BY को प्रचारित करने के योग्य नहीं है, इसलिए यह ORDER BY को अनदेखा कर देता है।
यह अनुकूलक व्यवहार अनुकूलक स्विच द्वारा नियंत्रित होता है derived_merge
. आप इसे अक्षम कर सकते हैं।
डेमो:
mysql [localhost] {msandbox} (test) > select @@version;
+-----------+
| @@version |
+-----------+
| 5.7.21 |
+-----------+
mysql [localhost] {msandbox} (test) > SELECT columnPrimaryKey, column1, column2, column3 FROM (SELECT columnPrimaryKey, column1, column2, column3 FROM testTable ORDER BY column2 ) AS tbl GROUP BY column3;
+------------------+----------------+---------+---------+
| columnPrimaryKey | column1 | column2 | column3 |
+------------------+----------------+---------+---------+
| 1 | Some Name 8-4 | 4 | 8 |
| 6 | Some Name 9-1 | 1 | 9 |
| 8 | Some Name 10-2 | 2 | 10 |
+------------------+----------------+---------+---------+
mysql [localhost] {msandbox} (test) > set optimizer_switch = 'derived_merge=off';
Query OK, 0 rows affected (0.00 sec)
mysql [localhost] {msandbox} (test) > SELECT columnPrimaryKey, column1, column2, column3 FROM (SELECT columnPrimaryKey, column1, column2, column3 FROM testTable ORDER BY column2 ) AS tbl GROUP BY column3;
+------------------+----------------+---------+---------+
| columnPrimaryKey | column1 | column2 | column3 |
+------------------+----------------+---------+---------+
| 5 | Some Name 8-1 | 1 | 8 |
| 6 | Some Name 9-1 | 1 | 9 |
| 8 | Some Name 10-2 | 2 | 10 |
+------------------+----------------+---------+---------+