Поле без группировки, используемое в предложении HAVING с подзапросом

В MariaDB с включенной опцией ONLY_FULL_GROUP_BY я получаю сообщение об ошибке

Негруппирующее поле 'vcount' используется в предложении HAVING.

при выполнении запроса

SELECT c.* FROM 
automobile_company c 
LEFT OUTER JOIN (SELECT company_id, COUNT(*) AS vcount FROM automobile_variant GROUP BY company_id) vc
USING (company_id) 
WHERE c.automobile_type = 0 AND vc.vcount > 0;

Но в запросе нет даже предложения HAVING.

  • Это потому, что MariaDB переписывает запрос для оптимизации?
  • Можно ли переписать приведенный выше запрос, не перемещая GROUP BY за пределы подзапроса?
  • Является ли мой единственный вариант использовать простое LEFT OUTER JOIN без подзапроса и упоминать каждое поле, которое необходимо выбрать в предложении GROUP BY?

person Joyce Babu    schedule 17.07.2017    source источник
comment
Похоже на ошибку в новой оптимизации в 10.2 (которую вы видимо используете). В качестве обходного пути попробуйте установить optimizer_switch='condition_pushdown_for_derived=off'. Отправьте отчет об ошибке по адресу jira.mariadb.org.   -  person elenst    schedule 17.07.2017


Ответы (1)


Если вам нужно только проверить, существует ли строка в автомобильном_варианте, вам не нужен счетчик или группа по

    SELECT c.* FROM automobile_company c WHERE c.automobile_type = 0 AND 
    EXISTS(select company_id from automobile_variant av where av.company_id=c.company_id);
person Robin Camus    schedule 17.07.2017
comment
Спасибо за ответ. Меня больше интересует полное решение, а не этот отдельный экземпляр. - person Joyce Babu; 17.07.2017