Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL 5.7.5+ pobierz pierwszy wiersz dla grup

Twoje ORDER BY w podzapytaniu tabeli pochodnej jest ignorowane w MySQL 5.7.

Zobacz https://dev.mysql.com/ doc/refman/5.7/en/derived-table-optimization.html

Twoje zewnętrzne zapytanie zawiera JOIN i GROUP BY, więc nie kwalifikuje się do propagowania ORDER BY, dlatego ignoruje ORDER BY.

To zachowanie optymalizatora jest kontrolowane przez przełącznik optymalizatora derived_merge . Możesz to wyłączyć.

Demo:

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 |
+------------------+----------------+---------+---------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj popularne słowa w PHP+MySQL

  2. Integracja ssl z mysql - Odmowa dostępu

  3. sprawdzanie wartości w drzewie n-głębokości?

  4. C# MySql UTWÓRZ UŻYTKOWNIKA

  5. Jak znaleźć kod ASCII dla danego znaku w MySQL?