2011/12/1 Thiago <zan...@farmaponte.com.br>:
>
> 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.
>
> 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
>
> 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?

O que, afinal, identifica qual o cargo atual?  Simplesmente o maior
id_car?  Parece uma modelagem meio estranha… e se a pessoa, por
exemplo, voltar a um cargo que já teve antes, qual a chave natural de
software.tb_pessoa_cargo?

O uso de identificadores artificiais e do prefixo tb_ no nome de
tabela parece indicar que pode haver problemas de modelagem, o que
tende a limitar as opções de consulta.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a