2010-05-26 4 views
4

Disons que:MySQL: Ignorer une colonne sélectionnée lors de l'utilisation DISTINCT

  1. Je veux interroger colA, colB et colC dans ma table.

  2. Je veux voir les valeurs DISTINCT mais je ne veux pas que colA soit un critère de distinction.

  3. Omettre colA n'est pas une option.

Quelle est la meilleure façon de structurer cette requête?

+0

http://stackoverflow.com/questions/1918556/sql-select-distinct-values-from-1-column Possible duplicate. – Nitrodist

Répondre

0

Je ne sais pas la syntaxe d'une table temporaire, donc si vous pseudocode = s'il vous plaît)

Select Distinct ColB, ColC into @Temp 
From SomeTable 
Where (predicates) 

Select ColA, ColB, ColC 
From SomeTable 
Inner Join @Temp on (SomeTable.ColB = @Temp.ColB and SomeTable.ColC = @Temp.ColC) 
Where (predicates) /* Added for comments */ 

Hope this helps.

+0

Cela ne produirait-il pas simplement une copie de SomeTable? La jointure interne correspond exactement à une ligne dans @Temp. –

+0

La jointure interne correspondra à toutes les lignes qui contiennent les deux valeurs de colonne, et pas d'autres. – Immersive

+0

Oui, mais toutes les lignes de SomeTable (correspondant au prédicat, s'il y en a un) ont leurs paires (ColB, ColC) dans la table @Temp. –

6

Il y a deux cas ici. Disons que vous avez les données

A B C (columns) 
a b c1 
a b c2 

Prendre des valeurs distinctes de A, B donne un seul résultat (a, b), avec deux valeurs pour la colonne C. La question est de savoir si vous voulez voir toutes les valeurs de C ou juste une valeur pour chaque valeur distincte des colonnes A et B?

Si vous voulez voir seulement une valeur de C, alors vous pouvez écrire

SELECT A, B, MAX(C) FROM YourTable 
    GROUP BY A, B 

D'autre part, si vous voulez voir toutes les valeurs C puis

SELECT DISTINCT A, B, C FROM YourTable WHERE ROW(A,B) IN 
    (SELECT A, B FROM YourTable 
    GROUP BY A, B) 

vous donne cette. Cette dernière alternative est nécessaire s'il y a d'autres colonnes dans la table.

+0

La première option semble bonne, mais n'est pas la seconde équivalente à SELECT DISTINCT A, B, C? –

+0

@Keith - S'il n'y a pas d'autres colonnes, alors c'est la même chose, mais comme la réponse dit "Cette dernière alternative est nécessaire s'il y a d'autres colonnes dans la table". – mdma

+0

Je ne comprends pas comment SELECT DISTINCT A, B, C ne fonctionne pas s'il y a des colonnes supplémentaires. –

Questions connexes