Surprise, c'est une parfaitement valide requête MySql:
select X, Y from someTable group by X
Si vous avez essayé cette requête dans la base de données Oracle ou SQL Server, vous devez obtenir l'naturelles message d'erreur:
Column 'Y' is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.
Alors, comment est-MySql déterminer qui Y à afficher pour chaque X? Il choisit juste un. À partir de ce que je peux dire, il choisit juste le premier il Y trouve. Le raisonnement étant, si Y n'est ni une fonction d'agrégation, ni dans la clause group by, puis en spécifiant "sélectionnez-Y" dans votre requête n'a pas de sens pour commencer. Donc, j'ai comme le moteur de base de données sera de retour ce que je veux, et vous l'aimerez.
Il y a même une configuration de MySql paramètre pour désactiver ce "relâchement". http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_only_full_group_by
Cet article mentionne même comment MySql a été critiqué pour être ANSI-SQL non conformes à cet égard. http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
Ma question est: Pourquoi a été MySql conçu de cette façon? Ce qui était leur raison d'être pour rompre avec la norme ANSI-SQL?