Bom dia a todos,
Primeiramente fiz um SELECT nas três tabelas para visualizar os dados.
SELECT * FROM TABELA_FUNCIONARIO;
SELECT * FROM TAB_RH_DEMITIDOS;
SELECT * FROM TABELA_DEPENDENTES;
Depois eu fiz o Left Join para identificar quem era igual em ambas as tabelas, quem não era NULO. Poderia usar o INNER JOIN , mas quis utilizar para treinar o Left Join
SELECT
TF.CODIGO_FUNCIONARIO, TRD.COD_FUNCIONARIO FROM TABELA_FUNCIONARIO TF
LEFT JOIN TAB_RH_DEMITIDOS TRD
ON TF.CODIGO_FUNCIONARIO = TRD.COD_FUNCIONARIO;
Identifiquei quem estava igual e fiz um NOT NULL para me mostrar apenas os pares.
SELECT
TF.CODIGO_FUNCIONARIO FROM TABELA_FUNCIONARIO TF
LEFT JOIN TAB_RH_DEMITIDOS TRD
ON TF.CODIGO_FUNCIONARIO = TRD.COD_FUNCIONARIO
WHERE TRD.COD_FUNCIONARIO IS NOT NULL;
Encontrei a fórmula para fazer o DELETE, porém ao tentar excluir deu erro de violação de chave estrangeira, pois havia conexão desse campo com a TABELA_DEPENDENTES.
Então eu utilizei essa fórmula acima num DELETE na TABELA_DEPENDENTES primeiro, assim consegui excluir todos os dependentes de quem foi demitido.
DELETE FROM TABELA_DEPENDENTES TD
WHERE TD.CODIGO_FUNCIONARIO IN (SELECT
TF.CODIGO_FUNCIONARIO FROM TABELA_FUNCIONARIO TF
LEFT JOIN TAB_RH_DEMITIDOS TRD
ON TF.CODIGO_FUNCIONARIO = TRD.COD_FUNCIONARIO
WHERE TRD.COD_FUNCIONARIO IS NOT NULL);
Por fim utilizei a mesma lógica para tentar novamente os funcionários , e dessa vez, como não havia nenhum vínculo em outra tabela foi possível a exclusão, e assim completando o exercício.
DELETE FROM TABELA_FUNCIONARIO TF
WHERE TF.CODIGO_FUNCIONARIO IN (SELECT
TF.CODIGO_FUNCIONARIO FROM TABELA_FUNCIONARIO TF
LEFT JOIN TAB_RH_DEMITIDOS TRD
ON TF.CODIGO_FUNCIONARIO = TRD.COD_FUNCIONARIO
WHERE TRD.COD_FUNCIONARIO IS NOT NULL);