2017-08-07 3 views
-2

Je rejoins deux tables « tblQuestion » et « tblSubskill », j'ai besoin SubSkillName distinctes dans le résultat comme indiqué dans la requêteSQL Distinct ne fonctionne pas dans jointure interne

SELECT DISTINCT ss.SubSkillName , ss.SkillId , ss.Id As SubSkillId 
FROM dbo.tblQuestion AS q INNER JOIN 
dbo.tblSubSkill AS ss ON q.SubSkillId = ss.Id 

qui fonctionne bien jusqu'à ce que j'ajouter une colonne de tblQuestion et retourne

enter image description here

maintenant je veux ajouter une colonne de tblQuestion, si bien que la requête est le suivant

SELECT DISTINCT ss.SubSkillName , ss.SkillId , ss.Id As SubSkillId , q.EadLevel 
FROM dbo.tblQuestion AS q INNER JOIN 
dbo.tblSubSkill AS ss ON q.SubSkillId = ss.Id 

mais ce qu'il retourne ont pas SubSkillName distinctes comme ci-dessous

enter image description here

+3

Eh bien le 'EadLevel' pour les deux lignes est différent donc il y a 2 lignes distinctes donc vous obtenez 2 lignes. Si vous ne voulez qu'une ligne, vous devez décider quel 'EadLevel' vous voulez et exprimer cette condition dans votre requête. –

+1

Distinct fonctionne comme aspecté, EadLevel est différent pour deux enregistrements .... Vous pouvez utiliser la clause ** Group By ** à la place de Distinct ... –

+1

'DISTINCT' ne conserve que des enregistrements ** distincts **. Donc, votre deuxième capture d'écran montre que votre requête fonctionne correctement. Que voudriez-vous voir en conséquence si ce n'est pas ça? – user2877959

Répondre

1

Eh bien, comme je l'ai observé mot-clé Distinct fonctionne bien comme il juge la différence entre deux ou plusieurs lignes sur la base de toutes les colonnes, y compris et puisque pour les deux premiers rangs, EadLevel est différent, ce qui rend l'ensemble de la combinaison différente. Donc ça fonctionne bien. Cependant, si vous n'en voulez qu'un seul, vous devez décider quel EadLevel vous voulez montrer.