2009-11-05 70 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