我必须找到,如果表中有任何行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上没有索引[如果这对您很重要]
答案 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