Maison >base de données >tutoriel mysql >Comment puis-je éviter les erreurs « L'expression n° 1 de la liste SELECT n'est pas dans GROUP BY » dans MySQL ?

Comment puis-je éviter les erreurs « L'expression n° 1 de la liste SELECT n'est pas dans GROUP BY » dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 18:51:11287parcourir

How Can I Avoid

Éviter les erreurs GROUP BY avec MySQL ANY_VALUE

Lorsque vous travaillez avec des bases de données MySQL, il est courant de rencontrer des erreurs liées aux opérations de regroupement, en particulier dans les versions avant 5.7. L'un de ces problèmes est l'erreur « L'expression n° 1 de la liste SELECT n'est pas dans GROUP BY ». Cette erreur se produit lors de la tentative de récupération de colonnes non agrégées dans une requête GROUP BY.

Dans MySQL 5.7, la fonction ANY_VALUE fournit une solution pratique à ce problème en permettant la récupération d'une seule valeur arbitraire à partir d'une valeur non agrégée. colonne agrégée au sein d’un groupe. Cependant, cette fonction n'est pas disponible dans les versions antérieures de MySQL, telles que 5.6.

Une solution de contournement consiste à désactiver temporairement le mode SQL ONLY_FULL_GROUP_BY, qui impose des exigences plus strictes pour les opérations GROUP BY. Cela peut être fait en utilisant la requête suivante :

SET SESSION sql_mode = '';

Après avoir désactivé le mode SQL, la requête utilisant la fonction ANY_VALUE s'exécutera sans erreur dans MySQL 5.6. Cependant, il est important de noter que cette solution de contournement peut conduire à des résultats imprévisibles, car elle permet de renvoyer des colonnes non agrégées dans les résultats de la requête.

Une solution plus fiable consiste à modifier la requête SQL elle-même pour agréger explicitement les colonnes souhaitées ou pour sélectionner une ligne spécifique du tableau. Par exemple, si la table images de l'exemple de requête comporte une colonne d'identifiant à incrémentation automatique, la requête suivante renverra une ligne par pays avec une image prévisible affichée :

SELECT c.id, c.name, i.*
FROM countries c
LEFT JOIN (
  SELECT MIN(id) id, country_id
  FROM images
  GROUP BY country_id
) first ON c.id = first.country_id
LEFT JOIN images i ON first.id = i.id

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