Assim não funciona? select ps.id_pes, ps.nome, cg.dsc, max(pg.id_car) as id_car from software.tbpessoa ps left join software.pessoa_cargo pc on(pc.id_pes = ps.id_pes) left join software.tb_cargo cg on(cg.id_car = pc.id_car) group by ps.id_pes, ps.nome, cg.dsc order by ps.nome
Nao testei, mas iria por esse caminho ai -----Mensagem Original----- From: Guimarães Faria Corcete DUTRA, Leandro Sent: Thursday, December 01, 2011 3:55 PM To: Comunidade PostgreSQL Brasileira Subject: Re: [pgbr-geral] Limitar linhas do left join 2011/12/1 Thiago <[email protected]>: > > 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 [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
