1
resposta

Como Deletar os registros não únicos da combinação de alguns campos?

Tenho uma tabela aonde consigo consultar os registros únicos com base na regra de combinação de alguns campos.

SELECT DadosExame_ID FROM dados_exame GROUP BY Exame_ID, GrupoLeitura, LadoLeitura, Passos;

Gostaria de deletar os registros que não estão nessa seleção.

O código abaixo retorna o erro. Erro Code: 1093. You can't specify target table 'dados_exame' for update in FROM clause 0.000 sec

DELETE FROM dados_exame WHERE DadosExame_ID NOT IN (
SELECT DadosExame_ID FROM dados_exame GROUP BY Exame_ID, GrupoLeitura, LadoLeitura, Passos)

Tentei utilizar o Distinct porém ele não retornar a PK dos registros duplicados com base na regra, só retorna os campos distintos.

Alguma ideia de como resolver esse desafio?

1 resposta

Oi, Tiago!! Tudo certo por aí?

Desde já, peço desculpas por demorar a te responder.

Para resolver esse desafio, você pode trabalhar com uma tabela temporária, a qual será um suporte para a exclusão dos dados duplicados da tabela principal (dados_exame), observe os passos abaixo:

1 - Criar uma tabela temporária para armazenar os registros únicos:

CREATE TEMPORARY TABLE registros_unicos
SELECT DadosExame_ID
FROM dados_exame
GROUP BY Exame_ID, GrupoLeitura, LadoLeitura, Passos;

Para criar a tabela temporária, utilizamos o comando CREATE TEMPORARY TABLE. Depois disso, demos um nome à tabela e utilizamos um SELECT que retorna apenas registros únicos da tabela dados_exame, esse processo ocorre através do GROUP BY: os registros com combinações iguais serão agrupados e apenas um valor único de DadosExame_ID (geralmente a primeira ocorrência) será selecionado para cada grupo.

2 - Utilizar a tabela temporária para realizar o DELETE na tabela original:

DELETE FROM dados_exame
WHERE DadosExame_ID NOT IN (SELECT DadosExame_ID FROM registros_unicos);

Neste momento, estamos excluindo da tabela dados_exame os registros cujo DadosExame_ID não está presente na tabela registros_unicos. Dessa maneira, serão mantidos em dados_exame apenas os registros únicos!

Espero ter ajudado com o desafio, Tiago! Contudo, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema!

Caso surjam novas dúvidas, fico à disposição.

Um grande abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!