Maison >base de données >tutoriel mysql >Comment résoudre l'erreur « only_full_group_by » de MySQL ?
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!