如何为以下问题编写SQL?
问题描述:
我必须找到,如果表中有任何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上没有索引[如果这对你很重要]
答
select * from MyTable where col2 in
(
select col2
from MyTable
group by col2
having count(*) > 1
) x
答
我认为下面将给予在MS SQL Server正确的结果.. 。也许在DB2中也是
select * from t where col2 in (select col2 from t group by col2 having count(*) > 1)
答
@Dave K是绝对正确的。
你也可以这样做。
我怀疑大多数优化器对两个查询都会完全相同。
SELECT *
FROM MyTable t1
( SELECT col2
FROM MyTable
GROUP BY col2
HAVING count(*) > 1
) t2
WHERE t1.col2 = t2.col2
答
如果您需要输出重复记录的结果,可以尝试以下操作。
select * from
(
select *
,row_number() over (partition by col2, order by col1, col2) r
from MyTable
)dt
where r = 2
我只是接近发表相同的答案:-) – 2009-11-05 09:20:38