SQL: Deleção de registros duplicados com associação em outra tabela

Boa noite pessoal!

Bem,

antes de mais nada já digo que sou péssimo no que se trata de SQL, então estou passando por uma dificuldade tremenda para resolver o problema abaixo. Vamos lá!

Tenho uma tabela na qual chamarei de T1 que tem dois campos ID e NOME. O problema da tabela T1 é que a mesma tem vários nomes repetidos, mas com id’s diferentes.

Logo, tenho uma outra tabela que se chama T2, nela tenho os id’s da T1 relacionados com os ids de uma outra tabela T3.

O que venho algum tempo tentando fazer é “equalizar” a minha tabela T1. Ou seja, deletando os registros duplicados, mas apenas aqueles registros que não estejam sendo relacionados na tabela T2.

O máximo que consegui fazer até o momento e verificar quais registros estão duplicados na tabela T1 e quantas vezes eles ocorrem:

SQL:

SELECT tmp.NAME, COUNT(*) REGISTROS_DUPLICADOS FROM T1 tmp GROUP BY NAME HAVING COUNT(*) > 1;

Em conversa com um amigo o mesmo me disse que talvez eu tenha que realizar um PL/SQL, mas sou bem ignorante nessa parte.

Pessoal, não sei se consegui ser claro na minha necessidade, caso haja alguma duvida estarei a disposição para juntos tentarmos solucionar meu problema.

Agradeço a atenção e o tempo de todos desde já!

Um abraço.

delete from T1 where id not in (select id from T2)

Legal mauricioadl.

Vou testar sua proposta.

Obrigado :slight_smile:

Legal, a solução mauricioadl. De certa forma funcionou, mas o problemas que da maneira que você propôs, registros que não estão duplicados na T1 e não estão associados na T2 tambem são deletados.

No meu caso, preciso deletar apenas aqueles registros no qual estão estão duplicados na T1 e não tem nenhuma associação na T2.

Obrigado mais uma vez.

Pessoal, a solução sugerida pelo nosso colega acima acabou não funcionando da erro integridade de constraint. Será que alguem tem alguma forma diferente de contornar o problema?

Estava pensando em fazer um PL/SQL com um laço for para varrer os registros com um if para compara se existe.

O que acham?

Abraço