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!