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
Libérer: 2025-01-25 03:02:10
original
429 Les gens l'ont consulté

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 :

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
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal