Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida JOIN

Bom dia,

No meu sistema tenho 3 tabelas FUNCIONARIO, CARGO e TRANSFERENCIA_FUNCIONARIO

Na tabela FUNCIONARIO possuo os seguintes dados,

COD_FUNCIONARIO | NOME_FUNCIONARIO

101 | EDUARDO MOREIRA

202 | PABLO SARAIVA

Na tabela CARGO possuo os seguintes dados,

COD_CARGO | NOME_CARGO

10 | AUX ALMOXARIFADO

20 | ASSISTENTE ADM

Na tabela TRANSFERENCIA_FUNCIONARIO os dados

COD_TRANSFERENCIA | COD_FUNCIONARIO | COD_CARGO_ORIGEM | COD_CARGO_DESTINO

1 |101 |10 |20

Preciso criar uma procedure para me retornar o nome do funcionario e o cargo de origem e destino

Fiz ela desta maneira, mas não sei se é a forma mais correta,

    SELECT  
             F.NOME_FUNCIONARIO,
             C.NOME_CARGO AS CARGO_ORIGEM,
             C2.NOME_CARGO AS CARGO_DESTINO

    FROM 
        TRANSFERENCIA_FUNCIONARIO TF
        RIGHT JOIN CARGO C ON C.COD_CARGO = TF.COD_CARGO_ORIGEM
        RIGHT JOIN CARGO C2 ON C2.COD_CARGO = TF.COD_CARGO_DESTINO
        INNER JOIN FUNCIONARIO F ON F.COD_FUNCIONARIO = TF.COD_FUNCIONARIO   

Desde já agradeço.

2 respostas
solução!

Olá Rafael!

Sim, acho que está da melhor forma, de acordo com o cenário, já que você tem uma tabela (TRANSFERENCIA_FUNCIONARIO) que se relaciona com funcionário, e com cargo (2 foreign key), você deve fazer usando o right join para evitar a repetição, assim, você está recuperando os dados da tabela TRANSFERENCIA_FUNCIONARIO apenas uma vez, para realizar a junção com as outras tabela. Porém acho você poderia repensar uma melhor maneira de modelar sua base de dados, você quer manter um histórico de mudança de cargo de um funcionário certo? Porém pense que pra apenas uma mudança de cargo isso resolve seu problema, mas quando o funcionário tiver outras mudanças de cargo, vai ficar uma sequencia de mudanças, e de registros nessa tabela (TRANSFERENCIA_FUNCIONARIO), fugindo assim da normalização, com muitas redundâncias.

Obrigado Jonilson Sousa! e avaliarei melhor a modelagem da base.