Em 28 de abril de 2011 14:28, Fábio Gibon - Comex System
<[email protected]> escreveu:
> Que tal assim:
>
> SELECT distinct on (p.pessoa_id) p.pessoa_id,
> p.nome,
> f.fone
> FROM pessoas p,
>            fones_pessoas
> WHERE
>           p.pessoa_id=f.pessoa_id;
>
> abraços
>
> Fábio Henrique Gibon
>

Eu havia testado assim também mas o explain fez eu buscar alternativas
até chegar a que eu enviei anteriormente:

--------------
explain select pes.*, (select numero from telefone where id_pessoa =
pes.id limit 1) telefone
from pessoa pes;

Seq Scan on pessoa pes  (cost=0.00..1663.20 rows=320 width=222)
  SubPlan 1
    ->  Limit  (cost=0.00..5.16 rows=1 width=58)
          ->  Seq Scan on telefone  (cost=0.00..20.63 rows=4 width=58)
                Filter: (id_pessoa = $0)

-------------- Adaptado para meu teste...

explain SELECT distinct on (p.id) p.id,
p.nome,
f.numero
FROM pessoa p,
           telefone f
WHERE
          p.id=f.id_pessoa;

Unique  (cost=88.75..93.00 rows=320 width=280)
  ->  Sort  (cost=88.75..90.87 rows=850 width=280)
        Sort Key: p.id
        ->  Hash Join  (cost=17.20..47.39 rows=850 width=280)
              Hash Cond: (f.id_pessoa = p.id)
              ->  Seq Scan on telefone f  (cost=0.00..18.50 rows=850 width=62)
              ->  Hash  (cost=13.20..13.20 rows=320 width=222)
                    ->  Seq Scan on pessoa p  (cost=0.00..13.20
rows=320 width=222)

--------------


Eu também não entendi o pq do max(fone) e max(mail).

-- 
Marcone Peres - DBA
http://www.linkedin.com/in/marconeperes
(61) 8146-0028
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a