Pessoal, boa tarde.

Tenho as seguintes tabelas:

tb_pessoa
id_pes nome
1      jose
2      bento

tb_cargo
id_car dsc
1      servente
2      pedreiro

tb_pessoa_cargo
id_pes_car id_car id_pes
1          1      1
2          2      1
3          1      2

Para eu fazer uma busca de todos os funcionários e seus cargos, 
utilizando um simples left join, eu faria da seguinte forma:

select ps.id_pes,ps.nome,cg.dsc
from tb_pessoa ps
left join tb_pessoa_cargo pc on ps.id_pes = pc.id_pes
left join tb_cargo cg on pc.id_car = cg.id_car
order by ps.nome

Dessa forma a busca me traria duas vezes o jose, pois o mesmo está duas 
vezes cadastrados na tabela de cargos, e eu gostaria de trazer apenas o 
cargo atual de cada funcionário.

Para solucionar isso, faço join de subconsultas, da seguinte forma:

select ps.id_pes,ps.nome,cg.dsc
from software.tb_pessoa ps
left join(
        select pg.id_pes,max(pg.id_car) as id_car
        from software.tb_pessoa_cargo pg
        group by pg.id_pes
) as pc on ps.id_pes = pc.id_pes
left join software.tb_cargo cg on pc.id_car = cg.id_car
order by ps.nome

Pergunta:
Existe alguma forma mais prática de fazer isso, simplesmente limitando o 
resultado do left join? Essa seria a melhor maneira de fazer tal consulta?

Obrigado e desculpe se a pergunta for um pouco tola.
Abraços!

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a