Muitas vezes temos a necessidade de descobrir se uma tabela possui linhas duplicadas e inclusive em algumas vezes queremos saber se existem linhas duplicadas levando em consideração apenas algumas colunas. Segue abaixo script para descobrir linhas duplicadas em uma tabela no Oracle.
Dados utilizados nos exemplos: tabela “clientes”
Exemplo 1: procurar linhas duplicadas utilizando todas as colunas
SELECT *
FROM (
SELECT cli.*, ROW_NUMBER() OVER (PARTITION BY cli.id_cliente, cli.nome, cli.idade ORDER BY cli.id_cliente) AS rn
FROM clientes cli
)
WHERE rn > 1
Como não há nenhuma linha que contenha todas as colunas iguais a outra linha (já que a coluna ID_CLIENTE sempre será diferente), a consulta não trouxe nenhum resultado.
Exemplo 2: procurar linhas duplicadas utilizando colunas específicas
SELECT *
FROM (
SELECT cli.*, ROW_NUMBER() OVER (PARTITION BY cli.nome, cli.idade ORDER BY cli.id_cliente) AS rn
FROM clientes cli
)
WHERE rn > 1
Nesse caso a consulta está retornando uma linha, o que significa que há uma duplicação para o nome “joão” com idade “40”.