2010-07-08 8 views
-1

Je suis en train de choisir distincts mais sa ne fonctionne passélection de lignes distinctes

SELECT Distinct `table1`.`myID` AS `myID`, 
       `table1`.`TypeID` AS `TypeID`, 

Y at-il quelque chose que je suis absent?

+2

Qu'est-ce qui ne fonctionne pas, quel résultat obtenez-vous à la place de ce que vous voulez? Je soupçonne que vous essayez d'utiliser distinct d'une manière que ce n'est pas destiné. Si vous sélectionnez plus d'une colonne resultset contiendra les TUPLES distincts (paires, triplés, etc.) des valeurs, pas les valeurs distinctes par chaque colonne ... –

Répondre

3

Distinct ne fonctionne pas sur un seul champ, il fonctionne sur toute la ligne. Votre résultat contient uniquement les lignes distinctes, c'est-à-dire uniquement les lignes dont tous les champs sont identiques.

Si vous voulez des valeurs distinctes pour un domaine spécifique, vous pouvez utiliser group by:

select table1.myID, min(table1.TypeID) as TypeId 
from ... 
group by table1.myID 

Cela vous donnera un résultat avec des valeurs distinctes pour myID, mais pour les champs que vous n'êtes pas Regrouper sur vous devriez spécifiez quelle valeur obtenir. Pour cela, vous utilisez des agrégats tels que min et max. MySQL peut vous permettre de spécifier des champs sans agrégats, mais il choisira simplement la première valeur qui apparaîtra (ce qui pourrait ne pas être du tout ce que vous pensez être la première valeur).

+0

que dois-je faire pour seul enregistrement u ne sais? – Autolycus

1

Une façon de faire ce que vous semblez vouloir est:

SELECT Distinct 'myID' as IDType, `table1`.`myID` AS ID 
UNION 
SELECT DISTINCT 'TypeID' as IDType, `table1`.`TypeID` AS `ID` 

Cela vous donnera des valeurs uniques pour chaque colonne comme suit:

myID 1 
myID 2 
myID 3 
TypeID 101 
TypeID 201 
TypeID 301 

Vous ne saurez pas quelles valeurs vont de pair , mais vous saurez quelles valeurs apparaissent dans chaque colonne.

1

Vous ne pouvez pas utiliser distinct sur les lignes d'une seule colonne.

Vous pouvez accomplir ce que vous essayez de faire en utilisant la sous-requête.

Questions connexes