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

Comment résoudre l'erreur MySQL 'uniquement_full_group_by'?

Patricia Arquette
Libérer: 2025-01-25 03:11:08
original
891 Les gens l'ont consulté

How to Resolve the MySQL

MySQL only_full_group_by Erreur: un guide complet

MySQL 5.7 a introduit le mode only_full_group_by SQL, conduisant à des erreurs comme celle-ci:

<code>Expression #1 of SELECT list is not in GROUP BY clause and contains non-aggregated column 'support_desk.mod_users_groups.group_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by</code>
Copier après la connexion

Cette erreur surgit car only_full_group_by oblige que toutes les colonnes de la liste SELECT, à l'exclusion des colonnes agrégées, doivent également apparaître dans la clause GROUP BY. Les versions MySQL précédentes n'ont pas appliqué cela, ce qui donne potentiellement des résultats ambigus.

Solutions et dépannage

Voici comment résoudre ce problème:

1. Incluez la colonne dans GROUP BY:

La correction la plus simple consiste à ajouter la colonne incriminée (group_id dans cet exemple) à votre clause GROUP BY:

<code class="language-sql">...
GROUP BY group_name, group_id
...</code>
Copier après la connexion

2. Agréger ou utiliser ANY_VALUE():

Si vous n'avez besoin que d'une seule valeur à partir de colonnes non agrégées dans chaque groupe, utilisez des fonctions agrégées comme COUNT() ou SUM(). Alternativement, ANY_VALUE() renvoie une valeur arbitraire du groupe:

<code class="language-sql">SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...</code>
Copier après la connexion

3. Désactiver only_full_group_by (non recommandé):

Vous pouvez désactiver ce mode, mais il est généralement découragé car il masque les requêtes potentiellement problématiques:

<code class="language-sql">SET sql_mode = 'only_full_group_by=OFF';</code>
Copier après la connexion

meilleures pratiques

  • Noms de colonne qualifiés: Autant toujours qualifier des noms de colonne avec des alias de table (par exemple, g.group_id) lors de l'utilisation de plusieurs tables pour éviter l'ambiguïté. Une requête révisée peut ressembler à ceci:
<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
...</code>
Copier après la connexion
  • UNICITÉ: Assurez-vous que group_id et group_name sont uniques dans leurs groupes respectifs pour empêcher les résultats inattendus des valeurs en double.

En suivant ces étapes, vous pouvez résoudre efficacement les violations only_full_group_by et écrire des requêtes MySQL plus robustes et pré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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal