在表的多列中选择重复的行

时间:2014-01-10 14:19:11

标签: sql oracle

我有一个包含4列的表,我想选择第1,2和3列的行具有相同的数据。

TableName
Col1  Col2  Col3   Col4
abc   12    xyz     1
abc   12    xyz     2
abc   12    xyz     3
abc   12    xyz     4
def   34    wxy     5
ghi   45    uvw     6
ghi   45    uvw     7
ijk   45    tuv     8

我希望选择第1行到第4行和第6行

感谢。

2 个答案:

答案 0 :(得分:2)

如果你想获得这些值的列表:

select col1, col2, col3
from tablename
group by col1, col2, col3
having count(*) > 1;

如果您想要实际的行,请将其重新加入:

select tn.*
from tablename tn join
     (select col1, col2, col3
      from tablename
      group by col1, col2, col3
      having count(*) > 1
     ) tncol
     on tn.col1 = tncol.col1 and tn.col2 = tncol.col2 and tn.col3 = tncol.col3;

答案 1 :(得分:2)

一种可行的方法如下。

select distinct t1.* 
from TableName t1
left join TableName t2
on t1.Col4 <> t2.Col4 and t1.Col1 = t2.Col1 and t1.Col2 = t2.Col2 and t1.Col3 = t2.Col3 
where
t2.Col4 is not null 

虽然这不是很优化(如果你的表有很多行和很多重复项)。