Maison >base de données >tutoriel mysql >Utiliser HAVING sans GROUP BY Standard SQL ?

Utiliser HAVING sans GROUP BY Standard SQL ?

DDD
DDDoriginal
2024-12-31 00:12:26191parcourir

Is Using HAVING Without GROUP BY Standard SQL?

HAVING sans GROUP BY : conformité SQL standard

La structure de requête présentée dans la question :

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

soulève préoccupations concernant sa validité selon le standard SQL. La requête utilise une clause HAVING sans clause GROUP BY correspondante.

Le standard SQL définit qu'une clause HAVING est valide si ses conditions de recherche satisfont à des critères spécifiques. Ces critères incluent le fait d'être fonctionnellement dépendant des colonnes référencées dans la clause GROUP BY ou d'être des références externes.

Dans la requête donnée, il n'y a pas de clause GROUP BY. Par conséquent, la condition de recherche NumberOfPages = MAX(NumberOfPages) ne répond pas aux critères définis, car il n'y a pas de dépendance fonctionnelle univoque de NumberOfPages sur un groupe spécifique.

Pour se conformer à la norme, la requête devrait être modifié pour inclure une clause GROUP BY, telle que :

SELECT *
FROM Book
GROUP BY BookId
HAVING NumberOfPages = MAX(NumberOfPages)

Dans cette requête révisée, la clause GROUP BY partitionne les données par BookId, créer des groupes distincts pour chaque livre. La clause HAVING devient désormais valide, car elle opère sur ces groupes, vérifiant si un groupe contient une ligne avec le nombre maximal de pages.

Il est important de noter que certains systèmes de bases de données, tels que MySQL, peuvent autoriser de telles requêtes sans une clause GROUP BY, mais ce comportement est considéré comme une extension non standard.

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