2009-06-11 4 views
0

Très bien donc j'ai une table, dans ce tableau sont deux colonnes avec ID. Je veux faire une des colonnes distinctes, et une fois qu'il est distinct de sélectionner tous ceux de la deuxième colonne d'un certain ID.Aide distincte

Au départ, j'essayé:

select distinct inp_kll_id from kb3_inv_plt where inp_plt_id = 581; 

Toutefois, cela ne la clause where d'abord, puis renvoie des valeurs distinctes.

Autre possibilité:

select * from (select distinct(inp_kll_id) from kb3_inv_plt) as inp_kll_id where inp_plt_id = 581; 

Cependant, cela ne peut pas trouver la colonne inp_plt_id car DISTINCT seule la colonne, et non pas toute la table.

Des suggestions?

Edit:

Chaque kll_id peut avoir un ou plusieurs plt_id. Je voudrais kll_id unique pour un certain ID kb3_inv_plt.

| inp_kll_id | inp_plt_id | 
|  1941 |  41383 | 
|  1942 |  41276 | 
|  1942 |  38005 | 
|  1942 |  39052 | 
|  1942 |  40611 | 
|  1943 |  5868 | 
|  1943 |  4914 | 
|  1943 |  39511 | 
|  1944 |  39511 | 
|  1944 |  41276 | 
|  1944 |  40593 | 
|  1944 |  26555 | 
+0

veuillez donner quelques exemples de tableau et de sortie attendue; ressemble presque à "faire distinct" vous voulez dire "choisir des valeurs du premier identifiant qui n'arrive qu'une seule fois" (ce qui n'est pas la sémantique SQL), mais ceci est une tentative de lecture d'esprit de ma part, un petit exemple aiderait! –

+0

Je ne comprends toujours pas ... ce que vous avez essayé à l'origine devrait fonctionner – Greg

Répondre

2

Si vous voulez dire, par "faire distincte", "choisir seulement inp_kll_id s qui arrivent juste une fois" (pas la sémantique SQL pour Distinct), cela devrait fonctionner:

select inp_kll_id 
from kb3_inv_plt 
group by inp_kll_id 
having count(*)=1 and inp_plt_id = 581; 
+0

Cela a du sens sauf que la colonne plt_id 'est supprimée' pour la sortie. Changer à 'select * du groupe kb3_inv_plt par inp_kll_id nombre ayant (*) = 1 et inp_plt_id = 581;' travaillé, merci! – puttputt

1

Obtenez tous la première distincte (alias 'a' dans l'exemple suivant), puis la réintègre à la table avec les critères spécifiés (alias 'b' dans l'exemple suivant).

SELECT  * 
FROM  (
      SELECT 
      DISTINCT inp_kll_id 
      FROM  kb3_inv_plt 
      ) a 
LEFT JOIN kb3_inv_plt b 
     ON a.inp_kll_id = b.inp_kll_id 
WHERE  b.inp_plt_id = 581 
0

dans ce tableau sont deux colonnes avec ID de. Je veux distinguer l'une des colonnes distinctes, et une fois c'est distinctes pour sélectionner toutes celles de la deuxième colonne d'un certain ID.

SELECT distinct tableX.ID2 
FROM tableX 
WHERE tableX.ID1 = 581 

Je pense que votre compréhension distincte peut être différente de la façon dont cela fonctionne. Cela va en effet appliquer la clause where en premier, puis obtenir une liste distincte d'entrées uniques de tableX.ID2, ce qui est exactement ce que vous demandez dans la première partie de votre question. En faisant une rangée distincte, vous vous assurez qu'aucune autre rangée n'est exactement la même. Vous ne faites pas une colonne distincte. Disons que votre table a ces données:

ID1 ID2 
10 4 
10 3 
10 7 
4  6 

Lorsque vous sélectionnez ID1 distincts, ID2 - vous obtenez la même chose que select * parce que les lignes sont déjà distinctes.

Pouvez-vous ajouter des informations pour éclaircir ce que vous essayez de faire?