2013-03-06 126 views
1

我想弄清楚一个简单而优雅的方式来从某个列唯一标识的表中返回每一行和列。从Oracle表中选择单列唯一的记录

换句话说。想象一下,一个表中有以下的列和行......我想所有的唯一ID重复的行...

id | duplicateID |Name | col1 | col2 | col3 

1 | 1   |A |B  | C | D 
2 | 1   |A |B  | C | D 
3 | 3   |A |B  | C | D 
4 | 3   |A |B  | C | D 
5 | 1   |A |B  | C | D 
6 | 5   |A |B  | C | D 
7 | 5   |A |B  | C | D 
8 | 6   |A |B  | C | D 

我想从ID 1,3,6,8返回的所有记录。 因为这些都是来自重复记录列的唯一ID。 但我想要这些行的所有记录。有没有办法以 做到这一点?我的形象不是......到目前为止,我已经写了几个令人难以置信的查询,没有好的结果。我不是SQL专家,我必须说。

UPDATE

1 | 1   |A |B  | C | D 
3 | 3   |A |B  | C | D 
6 | 5   |A |B  | C | D 
8 | 6   |A |B  | C | D 

将抽样结果,我需要。 这一切为Oracle表btw。

+1

根据您的样本数据请张贴期望的结果。 – 2013-03-06 22:19:54

+0

如果duplicateID 6检索id 8,为什么不重复id 1检索id 2? '我想要所有的记录ID 1,3,6和8' – Tim 2013-03-06 22:24:52

+0

我想我确实想要一个真正独特的行。 – SoftwareSavant 2013-03-06 22:28:32

回答

3

您可以像使用解析

select id, duplicateid, name, col1, col2, col3 
    from (select id, duplicateid, name, col1, col2, col3, 
       row_number() over (partition by duplicateid order by id) rn 
      from your_tab) 
where rn = 1; 

小提琴:http://sqlfiddle.com/#!4/c38b1/1

0

不知道我理解这个问题,但这里有云:

  select * from T 
     inner join 
     (
     select distinct duplicateID from T 
     ) as V 
     on T.id = V.duplicateID