Группировка по пользовательским переменным. MySQL
Изучал MySQL и задался вопросом о том, что будет при группировке строк по значению, которого нет в используемой таблице, например по пользовательской переменной или константному значению. Допустим есть некоторая таблица b. Вот ее структура и содержимое.
Есть переменная @var, которая на данный момент равна 1.
При выполнении этого запроса
SELECT id, a_id, @var := id
FROM b
GROUP BY @var;
получается следующий результат:
Теперь @var = 14. Снова выполняем этот же вопрос.
Вот результат:
Строка с id = 2 переместилась в конец.
Теперь, собственно вопрос.
- Как MySQL, да и сам стандарт SQL реагирует на группировки по значениям (столбцам), которых нет в таблице (пример
@var)? - Как возможно объяснить такое поведение СУБД? Результат этих запросов будет меняться в зависимости от значения в
@var.
Прошу меня поправить, если что-то некоректно излогаю. Заранее большое спасибо!
Ответы (1 шт):
Стандарт SQL определяет синтаксис и не определяет требование к смысловой нагрузке выражения. Использование константы в операторе group by не меняет результат (набор записей остается один и тот же) и на практике трудно представить применение такого запроса.
Только order by определяет порядок записей, поиск всех других закономерностей пустая трата времени. Без order by порядок зависит от тысячи причин: алгоритма, статистики и так далее. Администратор переложил таблицу из одного табличного пространство в другое порядок изменился.