Neste exemplo vamos usar uma tabela chamada "duplicado".
DDL para criação da tabela:
CREATE TABLE duplicado(
id INTEGER,
codigo INTEGER,
senha INTEGER,
nome VARCHAR(100)
);
Inserção de dados na tabela
INSERT INTO duplicado (id, codigo, senha, nome)
VALUES(1,1,1,'Lucas');
INSERT INTO duplicado (id, codigo, senha, nome)
VALUES(2,2,2,'Yudi');
INSERT INTO duplicado (id, codigo, senha, nome)
VALUES(3,1,2,'João');
Verificar os dados que foram inseridos:
SELECT * FROM duplicado;
Os códigos dos registros 1 e 3 estão duplicados(valor = 1), abaixo temos uma consulta para verificar os dados que estão duplicados:
SELECT codigo, Count(*) FROM duplicado
GROUP BY codigo
HAVING Count(*) > 1;
Encontramos o código 1 por duas vezes.
Bloco de execução para encontrar e deletar os dados duplicados:
EXECUTE block AS
DECLARE variable var_id int;
DECLARE variable var_codigo int;
BEGIN
for
SELECT max(id) AS id, codigo
FROM duplicado
GROUP BY codigo
HAVING count(*) > 1
INTO :var_id,:var_codigo
do DELETE FROM duplicado
WHERE id = :var_id
AND codigo = :var_codigo;
end
Novamente a consulta para encontrar os dados duplicados:
SELECT codigo, Count(*) FROM duplicado
GROUP BY codigo
HAVING Count(*) > 1;
O retorno da consulta agora é nulo.
Consulta em todos os registros da tabela:
SELECT * FROM duplicado;
O registro com o "id" 3 que tinha o mesmo código do registro com "id" 1 foi deletado, para excluir itens com chaves mais complexas basta adicionar novas variáveis ao bloco de execução.