Re: query con count

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: FRANCISCO JOSE PALAO VILLANUEVA <fjpv_2000(at)yahoo(dot)es>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: query con count
Date: 2014-06-05 17:02:22
Message-ID: 20140605170222.GS5146@eldon.alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

FRANCISCO JOSE PALAO VILLANUEVA escribió:
> Hola,
> tengo una query de la siguiente manera:
>
> Select t1.pd_id,count(t2.pc_id) as truta,t2.pr_id from p_d t1 left outer join p_c t2 on t1.pd_id=t2.pd_id where (t1.pov_id = 805 or t1.pd_zona='2' or t1.pd_zona='3' or t1.pd_zona='7') and t2.pbv_id = 805 and t2.pc_tipocli = 1 and t2.pr_id < 11 and t2.pc_d5 < '01/02/2014' and t2.pc_pc between 0 and 999 group by t1.pd_id,t2.pr_id order by t1.pd_id,t2.pr_id
>
> Bien esta me devuelve sólo tuplas donde t1.pd_id=t2.pd_id ??? es un left outer join, debería devolver todas las tuplas de la tabla p_d que cumplan que la condición (t1.pov_id = 805 or t1.pd_zona='2' or t1.pd_zona='3' or t1.pd_zona='7') y las que no se crucen con valores de la tabla p_c debería devolver por ejemplo:
> 490,null,null
> Por lo menos así lo hace la base de datos desde donde estoy migrando.
>
> De hecho si lanzo la consulta:
> Select t1.pd_id,count(t2.pc_id) as truta,t2.pr_id from p_d t1 left outer join p_c t2 on t1.pd_id=t2.pd_id where  t2.pbv_id = 805 and t2.pc_tipocli = 1 and t2.pr_id < 11 and t2.pc_d5 < '01/02/2014' and t2.pc_pc between 0 and 999 group by t1.pd_id,t2.pr_id order by t1.pd_id,t2.pr_id
>
> o así:
> Select t2.pd_id,count(t2.pc_id) as truta,t2.pr_id from p_d t1 left outer join p_c t2 on t1.pd_id=t2.pd_id where (t1.pov_id = 805 or t1.pd_zona='2' or t1.pd_zona='3' or t1.pd_zona='7') and t2.pbv_id = 805 and t2.pc_tipocli = 1 and t2.pr_id < 11 and t2.pc_d5 < '01/02/2014' and t2.pc_pc between 0 and 999 group by t2.pd_id,t2.pr_id order by t2.pd_id,t2.pr_id
> el resultado es el mismo ???

Es bien difícil leer tus consultas, pero quizás el problema puede ser
que tus condiciones en el WHERE permiten determinar que las filas con
pr_id nulo no deben emitirse, por ej. tienes t2.pr_id < 11, ¿no deberías
indicar (t2.pr_id < 11 OR t2.pr_id IS NULL)? Igual para las condiciones
en pc_d5 y el BETWEEN, quizás necesitan un "OR foo IS NULL" para poder
cumplirse para las tuplas que se completan de nulls.

> yo por lo que he visto en otros gestores de bd esto funciona mal en
> postgresql. No hace caso al left outer join, está haciendo un join
> normal

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

  • query con count at 2014-06-05 16:44:17 from FRANCISCO JOSE PALAO VILLANUEVA

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message FRANCISCO JOSE PALAO VILLANUEVA 2014-06-05 19:13:18 Re: query con count
Previous Message FRANCISCO JOSE PALAO VILLANUEVA 2014-06-05 16:44:17 query con count