Maison  >  Article  >  base de données  >  Pourquoi mes requêtes agrégées sans GROUP BY provoquent-elles des erreurs dans MySQL 5.7.14 ?

Pourquoi mes requêtes agrégées sans GROUP BY provoquent-elles des erreurs dans MySQL 5.7.14 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 03:39:02923parcourir

Why Do My Aggregate Queries Without GROUP BY Cause Errors in MySQL 5.7.14 ?

Requêtes agrégées sans GROUP BY : compréhension des erreurs et des résolutions

Auparavant, sur les anciennes versions de MySQL, les requêtes sans clause GROUP BY pour les requêtes agrégées les fonctions (par exemple, COUNT()) fonctionnaient souvent sans problème. Cependant, avec MySQL 5.7.14 et versions ultérieures, de telles requêtes peuvent rencontrer une erreur :

SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]

Cette erreur provient d'un changement dans le comportement par défaut de MySQL pour s'aligner sur d'autres systèmes SGBDR, qui nécessitent les champs non agrégés. dans la clause SELECT à inclure dans la clause GROUP BY lors de l'utilisation de fonctions agrégées.

Résoudre l'erreur :

Pour résoudre cette erreur, vous avez deux options :

1. Ajuster les paramètres MySQL :

Vous pouvez revenir au comportement hérité en modifiant les paramètres de MySQL. Cependant, cela n'est généralement pas recommandé car cela perpétue des pratiques de requête non optimales.

2. Corriger la requête :

La solution préférée consiste à modifier la requête pour inclure des colonnes non agrégées dans la clause GROUP BY. Par exemple, la requête ci-dessus peut être réécrite comme :

SELECT id, password, COUNT(id) AS count 
FROM users 
WHERE email = :email 
GROUP BY id, password 
LIMIT 1

Exception dans 5.7.5 :

Dans les versions MySQL 5.7.5 et ultérieures, c'est toujours Il est permis d'exclure les colonnes non agrégées de la clause GROUP BY lorsque la colonne non agrégée a été contrainte à une valeur unique (par exemple, en utilisant un filtre dans la clause WHERE). Des détails et des exemples de cette exception peuvent être trouvés ici.

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