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
Libérer: 2024-11-27 18:51:11
original
285 Les gens l'ont consulté

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

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

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