2010-12-06 8 views
3

Je suppose que c'est une question facile à résoudre, mais je recherche pendant une heure pour sa réponse. J'ai une table avec trois colonnes: "id", "id_x" et "nom". Mais il est peuplé de valeurs répétées, comme ceci:Sélectionnez seulement une colonne distincte

id id_x name 
1 100  Name_aaa 
2 100  Name_aaa 
3 100  Name_aaa 
4 100  Name_aaa* 
5 101  Name_bbb 
6 101  Name_bbb* 

Ok, ok, je ne l'ai pas créé cette table, et je ne peux pas les modifier ... Je veux juste savoir ce que je peux exécuter la requête pour revenir seulement les valeurs "100 - Name_aaa" et "101 - name_bbb" ... Notez qu'il y a un "*" après certains noms. Je voudrais regrouper seulement par le "id_x".

Est-il possible de le faire sans utiliser de sous-requêtes ou de jointures?

Merci d'avance!

Répondre

9

Un peu non testé, mais cela devrait le faire

select id_x, min(name) as name 
from table 
group by id_x 
+0

Cela a fonctionné pour moi. Merci. –

1

Essayez ceci,

sélectionnez id_x distinct, le nom de tablename

+0

Salut, Nanda! Merci pour votre réponse! Mais si je fais "select distinct id_x, nom du nom de table" je vais avoir "100 - Name_aaa", "100 - Name_aaa *", "101 - Name_bbb" et "101 - Name_bbb *". – pedrorezende

0
select distinct 
     id_x, 
     case when name ~ E'\\*$' then substring(name, 1, length(name)-1) 
       else name end 
from t; 
0

Or:

SELECT DISTINCT ON (id_x) id_x, name FROM table ORDER BY id_x, name; 
+0

Je ne pense pas que cela fonctionne avec toutes les bases de données (juste testé et MySQL n'a pas aimé.) – Malvineous

+0

Eh bien, la balise "postgresql" est mis là pour une raison. –

Questions connexes