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?

Barbara Streisand
Libérer: 2025-01-25 02:57:09
original
532 Les gens l'ont consulté

How to Resolve MySQL's `only_full_group_by` Error?

Mysql 5.7's only_full_group_by Mode: dépannage et solutions

La mise à niveau vers MySQL 5.7 introduit souvent l'erreur only_full_group_by. Cela se produit lorsqu'une instruction SELECT comprend des colonnes non agrégées non incluses dans la clause GROUP BY. Au lieu de désactiver cette caractéristique cruciale (qui est fortement découragée), explorons des solutions efficaces:

Le problème:

Les requêtes qui fonctionnaient correctement dans les versions MySQL plus anciennes pourraient échouer en 5.7, la production d'une erreur indiquant des colonnes non agglées dans la liste SELECT ne dépend pas fonctionnellement des colonnes GROUP BY.

Solutions recommandées:

  1. Inclure des colonnes non agrégées dans GROUP BY: La solution la plus simple est souvent d'ajouter toutes les colonnes non aggrées de la liste SELECT à la clause GROUP BY. Cela garantit que chaque groupe définit de manière unique les valeurs de ces colonnes. Par exemple:

    <code class="language-sql">GROUP BY group_name, group_id</code>
    Copier après la connexion
  2. Utilisez des fonctions agrégées: Si vous avez besoin de colonnes non agrégées dans vos résultats mais nécessitez toujours le regroupement, utilisez des fonctions agrégées (comme MIN(), MAX(), AVG(), SUM(), COUNT(),

    ,
    <code class="language-sql">SELECT 
      group_id AS 'value', 
      group_name AS 'text', 
      COUNT(*) AS 'count' 
    FROM mod_users_groups
    LEFT JOIN mod_users_data ON group_id = mod_users_data.group_id 
    WHERE ...
    GROUP BY group_name, group_id</code>
    Copier après la connexion
    ) sur ces colonnes. Cela garantit un seul résultat par groupe. Exemple:
  3. Calonne des colonnes explicitement:
    <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 ...
    GROUP BY g.group_name, g.group_id 
    HAVING COUNT(d.user_id) > 0
    ORDER BY g.group_name</code>
    Copier après la connexion
    qualifier toujours des colonnes avec leurs noms de table ou alias, en particulier dans les requêtes impliquant des jointures. Cela clarifie à quelle table appartient à chaque colonne et empêche l'ambiguïté.

only_full_group_by only_full_group_by En mettant en œuvre ces stratégies, vous pouvez résoudre l'erreur

et maintenir l'intégrité des données tout en adhérant à la conformité standard SQL améliorée de MySQL 5.7. Éviter de désactiver ; C'est une caractéristique critique pour prévenir les résultats de requête inattendus et potentiellement incorrects.

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!

source:php.cn
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