2017-04-03 3 views
0

J'ai une requête qui fonctionne quand je faisPourquoi DISTINCT doit-il passer en premier dans MySQL?

SELECT DISTINCT(table.field.id), 1 FROM ... 

mais échoue quand je fais

SELECT 1, DISTINCT(table.field.id) FROM ... 

Est-ce un comportement connu?

Pourquoi le premier fonctionne-t-il alors que le second ne fonctionne pas?

+11

'DISTINCT' est * pas * une fonction. 'SELECT DISTINCT' est une clause dans le langage SQL. 'SELECT DISTINCT' s'applique aux colonnes * all * de la clause. –

+1

'DISTINCT' signifie" éliminer les lignes en double ". Cela n'a aucun sens au niveau de la colonne. C'est pourquoi il reste [entre 'SELECT' et la liste des expressions sélectionnées] (https://dev.mysql.com/doc/refman/5.7/en/select.html). Pour répondre à la question en titre: parce que la [documentation de 'SELECT'] (https://dev.mysql.com/doc/refman/5.7/en/select.html) le dit. – axiac

Répondre

1

Malheureusement, je ne suis pas encore en mesure d'ajouter un commentaire.

Ce que @Gordon Linoff a écrit est exactement exact. Vous obtenez erreur comme DISTINCT en général fonctionne dans le cadre de la clause SELECT ou AGGREGATE fonction. Il est utilisé pour renvoyer des lignes uniques à partir d'un ensemble de résultats et il peut être utilisé pour forcer des valeurs de colonnes uniques dans une fonction d'agrégat.

Exemples: SELECT DISTINCT * ...COUNT(DISTINCT COLUMN) ou SUM(DISTINCT COLUMN).

Plus d'informations est à peu près DISTINCT dans populaires moteurs DB: