Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL/MariaDB - подреждане по вътрешна подзаявка

След малко ровене мога да потвърдя и двата ви сценария:

MySQL 5.1 прилага ORDER BY вътре в подзаявката.

MariaDB 5.5.39 на Linux не приложете ORDER BY вътре в подзаявката, когато няма LIMIT се доставя. Това прави обаче правилно приложете реда при съответен LIMIT се дава:

SELECT t2.Code 
FROM (
  SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;

Без този LIMIT , няма основателна причина да се прилага сортирането в подзаявката. Може да се приложи еквивалентно към външната заявка.

Документирано поведение:

Както се оказа, MariaDB е документирала това поведение и не се счита за грешка:

„Таблица“ (и подзаявка в FROM клауза също) е - според стандарта SQL - неподреден набор от редове. Редове в таблица (или в подзаявка в FROM). клауза) не идват в конкретен ред. Ето защо оптимизаторът може да игнорира ORDER BY клауза, която сте посочили. Всъщност стандартът на SQL дори не позволява ORDER BY клауза да се появи в тази подзаявка (позволяваме го, защото ORDER BY ... LIMIT ... променя резултата, набора от редове, а не само техния ред).

Трябва да третирате подзаявката в FROM клауза, като набор от редове в някакъв неопределен и недефиниран ред и поставете ORDER BY на най-високо ниво SELECT .

Така че MariaDB също препоръчва прилагането на ORDER BY в най-външната заявка или LIMIT ако е необходимо.

Забележка:В момента нямам достъп до подходящ MySQL 5.5 или 5.6, за да потвърдя дали поведението е същото там (и SQLFiddle.com работи неправилно). Коментари на оригиналния доклад за грешка (затворен като не-бъг) предполагат, че MySQL 5.6 вероятно се държи по същия начин като MariaDB.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да активирам автоматично повторно свързване на MySQL клиент с MySQLdb?

  2. SQL - Актуализирайте множество записи в една заявка

  3. Как да се свържем дистанционно с MySQL база данни, разположена на нашия споделен сървър

  4. mysql:защо сравнението на "низ" с 0 дава истина?

  5. Най-ефективният начин за вмъкване на редове в MySQL база данни