Maison >base de données >tutoriel mysql >Comment résoudre l'erreur « only_full_group_by » de MySQL ?

Comment résoudre l'erreur « only_full_group_by » de MySQL ?

DDD
DDDoriginal
2025-01-25 03:02:10430parcourir

How to Resolve MySQL's

Erreur only_full_group_by de MySQL 5.7 : explication détaillée et solution

Les erreurs « L'expression n°1 de la liste SELECT n'est pas dans la clause GROUP BY » et « only_full_group_by » dans MySQL 5.7 peuvent prêter à confusion. Cet article a pour objectif de faire la lumière sur ce problème et d’apporter une solution.

Analyse du problème

Les versions MySQL antérieures à 5.7 permettaient aux listes SELECT de contenir des colonnes qui n'apparaissaient pas dans la clause GROUP BY, même si les valeurs de ces colonnes pouvaient différer au sein du groupe. Cependant, dans la version 5.7, le comportement par défaut a changé pour autoriser cela uniquement lorsque ces colonnes sont agrégées. Ceci est appliqué par le mode "only_full_group_by".

Problème résolu

Cette erreur indique que la liste SELECT de la requête contient une colonne non agrégée qui n'a pas de dépendance fonctionnelle sur la colonne de la clause GROUP BY. Pour résoudre ce problème, vous pouvez supprimer les colonnes non agrégées ou les ajouter à la clause GROUP BY.

Solutions recommandées

Pour cette requête particulière, il est recommandé d'ajouter la colonne "group_id" à la clause GROUP BY, en s'assurant que toutes les colonnes non agrégées ont des dépendances fonctionnelles sur les colonnes de la clause GROUP BY :

<code class="language-sql">SELECT
  g.group_id AS 'value',
  g.group_name AS 'text'
FROM
  mod_users_groups g
LEFT JOIN
  mod_users_data d ON g.group_id = d.group_id
WHERE
  g.active = 1
  AND g.department_id = 1
  AND g.manage_work_orders = 1
  AND g.group_name != 'root'
  AND g.group_name != 'superuser'
GROUP BY
  g.group_id,
  g.group_name
HAVING
  COUNT(d.user_id) > 0
ORDER BY
  g.group_name</code>

Autres notes

Dans les requêtes multi-tables, il est préférable de qualifier les noms de colonnes avec des noms de table ou des alias, comme indiqué dans la solution recommandée.

La désactivation de "only_full_group_by" n'est pas recommandée car elle permet une sélection arbitraire de colonnes non agrégées, ce qui peut conduire à des résultats incohérents et imprévisibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn