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

Responder a