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
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 |