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

Защо Mysql's Group By и Oracle's Group по поведение са различни

Дизайнерите на MySQL поставиха своето нестандартно разширение в GROUP BY в опит да направим разработката по-лесна и определени заявки по-ефективни.

Ето тяхната обосновка.

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

Има сървърен режим, наречен ONLY_FULL_GROUP_BY което деактивира нестандартните разширения. Можете да зададете този режим с помощта на това изявление.

 SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'  

Ето цитат от тази страница, с добавен акцент.

Ако ONLY_FULL_GROUP_BY е деактивиран, MySQL разширение към стандартното използване на SQL на GROUP BY разрешава списъка за избор, HAVING условие или ORDER BY списък за препращане към неагрегирани колони, дори ако колоните не са функционално зависими от GROUP BY колони... В този случай сървърът е свободен да избере произволна стойност от всяка група , така че освен ако не са еднакви, избраните стойности са недетерминирани , което вероятно не е това, което искате.

Важната дума тук е недетерминистично Какво означава това? Това означава случайно, но по-лошо. Ако сървърът избере произволни стойности, това означава, че ще върне различни стойности в различни заявки, така че имате шанс да хванете проблема, когато тествате софтуера си. Но недетерминистично в този контекст означава, че сървърът избира една и съща стойност всеки път, докато не го направи.

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

Иска ми се хората, които наскоро изучават SQL, да задават това 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. Oracle 12c Топ нови функции

  2. Как да свия временното пространство за таблица в oracle?

  3. Формат на URL низ за свързване към база данни на Oracle с JDBC

  4. PL/SQL има ли еквивалентен StringTokenizer на Java?

  5. Как да разрешите ORA-29285:грешка при запис на файл