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