如何为以下问题编写SQL?

时间:2009-11-05 09:12:04

标签: sql db2

我必须找到,如果表中有任何行col2的值是重复的。与指定的场景一样,第1行和第2行是重复的,因为col2的值相同。

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上没有索引[如果这对您很重要]

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

我认为以下内容将在ms sql server中给出正确的结果...也许在DB2中也是

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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