Maison > base de données > tutoriel mysql > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-01 03:39:02
original
923 Les gens l'ont consulté

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!