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

MySQL:SQL грешка:1140, SQLState:42000

Следната заявка е невалидна с ONLY_FULL_GROUP_BY активиран. Първият е невалиден, защото името в списъка за избор не е наименувано в GROUP BY клауза

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

без колони GROUP е незаконно, ако няма клауза GROUP BY

Можете да пренапишете заявката, за да работи добре като

mysql> SELECT name, MAX(age) FROM t GROUP BY name;

или

Изключете ONLY_FULL_GROUP_BY и грешката трябва да изчезне.

Връзките може да ви помогнат

  1. Можете да търсите грешки в MySQL тук
  2. group-by-functions
  3. подобна публикация в stackoverflow.com
  4. друг форум, в който се обсъжда подобен проблем
  5. server-sql-mode

АКТУАЛИЗИРАНЕ

Това е отговорът на вашия коментар.

But i would like to know more about disabling the Group BY mode in mysql db.  

Режими на SQL на сървъра

  • MySQL сървърът може да работи в различни SQL режими и може да прилага тези режими по различен начин за различни клиенти, в зависимост от стойността на sql_mode системна променлива. Тази способност позволява на всяко приложение да приспособи работния режим на сървъра към собствените си изисквания.

  • За да зададете режима на SQL при стартиране на сървъра, използвайте --sql-mode="modes" опция на командния ред или sql-mode="modes" във файл с опции като my.cnf (Unix operating systems) или my.ini (Windows) . modes е списък с различни режими, разделени със запетаи. За да изчистите изрично режима на SQL, задайте го на празен низ, като използвате --sql-mode="" на командния ред или sql-mode="" във файл с опции.

  • За да промените SQL режима по време на изпълнение, използвайте

    SET [GLOBAL|SESSION] sql_mode='modes'
    изявление за задаване на системната променлива sql_mode. Задаването на променливата GLOBAL изисква привилегията SUPER и засяга работата на всички клиенти, които се свързват от този момент нататък. Задаването на променливата SESSION засяга само текущия клиент. Всеки клиент може да промени своята собствена стойност на sql_mode на сесия по всяко време.

  • За да определите текущата глобална или сесия sql_mode стойност, използвайте следните изрази:

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  • Можете да препоръчате таблица sql_mode

I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.  

Това се случва заради версията на MySQL. Каква е версията на MySQL на вашия локален компютър?

Как да проверя версията на MySQL?

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28    |
+-----------+
1 row in set (0.00 sec)    

За тестване на sql_mode ONLY_FULL_GROUP_BY , създадох таблица patient с две колони id, name и вмъкнати записи. Запомнете sql_mode ONLY_FULL_GROUP_BY не е зададен по подразбиране, трябва да зададете, ако искате.

1)MySQL версия 5.0.45-community-nt

SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Неуспешно, нямаше смисъл да задавате sql_mode на ONLY_FULL_GROUP_BY тъй като няма да позволи неагрегирани колони, които не са наименувани в клаузата GROUP BY.

2)MySQL версия 5.1.40-общност

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

След това след задаване на sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

3)MySQL версия 5.5.28

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

След това след задаване на sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Заключение

Както можете да видите, заявката е неуспешна във версия 5.0.45 и успее на/след 5.1.40 и 5.5.28Преди версията на MySQL 5.1.10 (не съм сигурен) заявка без GROUP BY не успява независимо от sql_mode ONLY_FULL_GROUP_BY зададен или не.

Някои интересни грешки и връзка с често задавани въпроси sql_mode

  1. Режимът ONLY_FULL_GROUP_BY sql е прекалено ограничаващ
  2. sql-mode:само пълна група по режим не работи
  3. ЧЗВ за MySQL 5.0:SQL режим на сървъра


  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 заявка връща false?

  2. Как да транспонирате MYSQL db в PHP

  3. Параметър номер 2 не е OUT параметър

  4. Сума стойностите на многомерния масив по ключ без цикъл

  5. Синтаксис на SQL INSERT – изброен от СУБД