2010-12-06 140 views
3

我想这是一个容易解决的问题,但我正在研究一个小时的答案。 我有一个三列表:“id”,“id_x”和“名称”。但它填充了重复的值,就像这样:只选择一个不同的列

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* 

好吧,好吧,我没有创建这个表,我不能修改他们...我只是想知道我的查询可以执行返回只有值“100 - Name_aaa”和“101 - name_bbb”...请注意,在某些名称后面有一个“*”。我只想按“id_x”分组。

有没有办法不使用子查询或连接?

在此先感谢!

回答

9

有点未经测试,但是这应该这样做

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

它为我工作。谢谢。 – 2011-07-11 01:10:27

1

试试这个,

选择不同id_x,名字从表名

+0

嗨,南大!谢谢你的回答!但如果我做“选择不同的ID_X,名称来自表名”我会得到“100 - Name_aaa”,“100 - Name_aaa *”,“101 - Name_bbb”和“101 - Name_bbb *”。 – pedrorezende 2010-12-06 13:40:43

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

我不认为这适用于所有的数据库(只是测试过它,MySQL不喜欢它。) – Malvineous 2011-02-23 05:40:43