1
resposta

Como consultar as PK dos 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.

Essa query abaixo me retorna as PK dos registros únicos:

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

Essa tabela possui muitos outros registros além desses listados acima. O que preciso agora é uma Query que seja o contrário dessa acima, listando a PK dos registros que não são único com base nessa regra de campos.

Quando faço o NOT IN o retorno é nulo, porém existem esses registros.

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

Tentei fazer o mesmo usando o DISTINCT, porém nesse caso não consigo listas as PKs pois elas são únicas.

Alguma ideia de como resolver esse desafio?

1 resposta

Oi, Tiago! Tudo bem?

Desde já, peço desculpas pela demora em te responder.

Existe uma maneira bem interessante de resolver este desafio! Vamos lá?

De maneira geral, iremos trabalhar com uma subconsulta atrelada à clausula HAVING, observe:

SELECT DadosExame_ID
FROM dados_exame
WHERE (Exame_ID, GrupoLeitura, LadoLeitura, Passos) IN (
    SELECT Exame_ID, GrupoLeitura, LadoLeitura, Passos
    FROM dados_exame
    GROUP BY Exame_ID, GrupoLeitura, LadoLeitura, Passos
    HAVING COUNT(*) > 1
);

Indo de dentro para fora (ou seja, começando do SELECT presente na subconsulta), filtramos todos os registros da tabela que não são únicos e apresentamos os seus campos Exame_ID, GrupoLeitura, LadoLeitura e Passos. Isso foi possível, pois utilizamos o comando HAVING COUNT(*) > 1, que realiza uma contagem dos dados e filtra todos os que têm a combinação Exame_ID, GrupoLeitura, LadoLeitura e Passos igual (se a função COUNT(*) retornar um valor maior que um, então existem informações repetidas).

A partir do resultado obtido, filtramos (por meio do WHERE) os DadosExame_ID dos registros que apareceram na subconsulta e criamos uma visualização para apresentá-los.

Pronto! Agora temos todas as chaves primárias dos registros não únicos da tabela dados_exame!

Tiago, espero ter ajudado! Caso surjam dúvidas após minha explicação, estarei aqui para conversamos sobre elas e também sobre seu desafio.

Um forte abraço.

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software