Предложение HAVING
используется для фильтрации групп строк.Вы ссылаетесь на min(a)
и max(a)
, которые (при отсутствии какого-либо предложения GROUP BY
) агрегируются по всем a
значениям в таблице, но затем используете сравнение с одним значением a
.
Так какое значение a
должен использовать MySQL?Все другие РСУБД, о которых я знаю, на этом этапе выдают ошибку, однако MySQL это допускает. Из документов
Стандартный SQL не позволяет условию HAVING
именовать столбцы, не найденные в предложении GROUP BY
, если они не включены в статистическую функцию.MySQL позволяет использовать такие столбцы для упрощения расчетов.Это расширение предполагает, что у несгруппированных столбцов будут одинаковые групповые значения. В противном случае результат является неопределенным.
Таким образом, в вашем случае из результатов, которые вы получаете, кажется, что он в итоге использовал 1
в качестве скалярного значения для a
но такое поведение не гарантируется, и с таким же успехом могло бы использоваться 2
или любое другое существующее значение a
.