Следната заявка е невалидна с 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 и грешката трябва да изчезне.
Връзките може да ви помогнат
- Можете да търсите грешки в MySQL тук
- group-by-functions
- подобна публикация в stackoverflow.com
- друг форум, в който се обсъжда подобен проблем
- server-sql-mode
АКТУАЛИЗИРАНЕ
Това е отговорът на вашия коментар.
But i would like to know more about disabling the Group BY mode in mysql db.
-
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
- Режимът ONLY_FULL_GROUP_BY sql е прекалено ограничаващ
- sql-mode:само пълна група по режим не работи
- ЧЗВ за MySQL 5.0:SQL режим на сървъра