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

MySQL - Избор на колона, която не е в група по

Вярно е, че тази функция позволява някои двусмислени заявки и мълчаливо връща набор от резултати с произволна стойност, избрана от тази колона. На практика това обикновено е стойността от реда в групата, която физически се съхранява първа.

Тези заявки не са двусмислени, ако изберете само колони, които са функционално зависими от колоната(ите) в критериите GROUP BY. С други думи, ако може да има само една отделна стойност на колоната "двусмислена" на стойност, която дефинира групата, няма проблем. Тази заявка би била незаконна в Microsoft SQL Server (и ANSI SQL), въпреки че логически не може да доведе до неяснота:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

Също така MySQL има SQL режим, за да го накара да се държи според стандарта:ONLY_FULL_GROUP_BY

FWIW, SQLite също позволява тези двусмислени клаузи GROUP BY, но избира стойността от последната ред в групата.

Поне във версията, която тествах. Какво означава да си произволен е, че или MySQL, или SQLite могат да променят своята реализация в бъдеще и да имат различно поведение. Следователно не трябва да разчитате на поведението да остане такова, каквото е в момента в двусмислени случаи като този. По-добре е да пренапишете заявките си, за да бъдат детерминирани, а не двусмислени. Ето защо MySQL 5.7 вече активира ONLY_FULL_GROUP_BY по подразбиране.



  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 – Как да махна таблица, ако съществува в базата данни?

  2. Справка:Какво е перфектен примерен код, използващ разширението MySQL?

  3. MySQL не използва индекси с клауза WHERE IN?

  4. Извличане на изображение, съхранено като BLOB в MYSQL DB

  5. Как да ограничим достъпа до MySQL порт