ONLY_FULL_GROUP_BY не установлено, но все еще имеет ошибку 1140

Я завершаю реализацию своего веб-сайта, но теперь у меня есть проблема, которая возникает в Интернете, но не локально.

Я получаю эту ошибку:

failed: Mixing of GROUP columns (MIN (), MAX (), COUNT (), ...) with no GROUP columns is illegal if there is no GROUP BY clause

результат SQL-запроса

Искал на многих форумах в сети, большинство пользователей советуют изменить запрос, что я не могу/не хочу, или говорят, что это было, вероятно, в sql-режиме: включено ONLY_FULL_GROUP_BY сервера

Мой sql-режим пуст на моем сервере онлайн (я вижу с запросом select @@sql_mode;) Более того, чтобы быть уверенным, я поставил sql_mode='' in my.cnf.

Но проблема остается.

Это из-за моей версии mysql 5.0.44 на моем сервере онлайн и локально 5.1.32 (что у меня нет этого бага...)?


person Stevo32    schedule 12.04.2013    source источник


Ответы (1)


да. Ты прав. Это происходит из-за версии 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 и 5.1.32 (как вы упомянули в вопросе). До версии MySQL 5.1.10 (не уверен) запрос без GROUP BY завершается ошибкой независимо от того, установлен sql_mode ONLY_FULL_GROUP_BY или нет.

Некоторые интересные ошибки и ссылка на часто задаваемые вопросы по sql_mode

  1. ONLY_FULL_GROUP_BY режим sql чрезмерно ограничен
  2. режим sql: не работает только полная группировка по режиму
  3. Часто задаваемые вопросы по MySQL 5.0: режим SQL сервера
person Aniket Kulkarni    schedule 13.10.2013