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