MyWiki | MySql | Переход на версию 2.7
Переход на версию 2.7

В мускуле есть режим ONLY_FULL_GROUP_BY, который заставляет сервер понимать только те запросы с GROUP BY, в которых для группировки указываются все неагрегирующие поля, указанные в SELECT согласно стандарту SQL. И ладно, когда у меня есть запрос на связку таблиц, где я могу в GROUP BY поместить названия колонок c функциональной зависимостью на ключи. Поместил туда GROUP BY 1,2,3,4,5,6..X и забыл. А что делать с запросами, где я должен сделать группировку по полю всего одной таблицы?

Итак, есть таблица `dates`, свидания.

id   name            date
1    Жанна Фриске    2013-12-12
2    Жанна Фриске    2013-12-13
3    Вера Брежнева   2013-12-14


Теперь педалим два одинаковых запроса. Один с пустым sql_mode, второй с ONLY_FULL_GROUP_BY:

SET @@sql_mode = "";
SELECT * FROM dates GROUP BY name;

SET @@sql_mode = "ONLY_FULL_GROUP_BY";
SELECT * FROM dates GROUP BY name;


В первом случае ожидаемый результат (мне неважно, что для Жанны выбралась запись с id=1, а не 2):

id   name            date
1    Жанна Фриске    2013-12-12
3    Вера Брежнева   2013-12-14


А во втором — ошибка. SQL error 1055 dates.id is not in GROUP BY. Что логично, потому что id неявным образом присутствует в SELECT'е. Ок, я добавлю в GROUP BY все имена колонок, что есть в SELECT. Но тогда в ответе сервер мне вернет все строки из таблицы, что тоже логично, но мне нафиг не надо, так как группировки по имени так и не произошло. И порядок названий полей тут не играет роли. Вот здесь у меня и возникает вопрос к общественности. Что мне делать в случае с такой простой группировкой при выборке из одной таблицы? Как составить запрос по выборке группированых по имени данных из одной таблицы, чтобы он работал при разных sql_mode?

РЕШЕНИЕ

Add this:

[mysqld]
sql-mode=""

To:
/etc/mysql/my.cnf

 

Переглядів: 11
Дата публікації: 15:37 24.12.2016