2009-11-05 42 views
0

我必须找到,如果表中有任何col2值重复的行。就像在指定的场景中一样,行1和2是重复的,因为col2的值是相同的。如何为以下问题编写SQL?

Table 
------------------- 
Col1 Col2 Col3 
1  1  4 
2  1  3 
3  2  2 
4  3  1 

目前我在做什么是

select count(*) from table group by col2 order by 1 desc 

如果第一行的值是> 1,则有重复。

请指定针对此问题的任何优化查询。

注意表包含数据万亿,并且对col2上没有索引[如果这对你很重要]

回答

5
select * from MyTable where col2 in 
(
select col2 
from MyTable 
group by col2 
having count(*) > 1 
) x 
+0

我只是接近发表相同的答案:-) – 2009-11-05 09:20:38

1

我认为下面将给予在MS SQL Server正确的结果.. 。也许在DB2中也是

select * from t where col2 in (select col2 from t group by col2 having count(*) > 1) 
0

@Dave K是绝对正确的。
你也可以这样做。
我怀疑大多数优化器对两个查询都会完全相同。

SELECT * 
FROM MyTable t1 
     ( SELECT col2 
      FROM  MyTable 
      GROUP BY col2 
      HAVING count(*) > 1 
     ) t2 
WHERE t1.col2 = t2.col2 
0

如果您需要输出重复记录的结果,可以尝试以下操作。

select * from 
(
    select * 
    ,row_number() over (partition by col2, order by col1, col2) r 
    from MyTable 
)dt 
where r = 2