On Wed, Jun 4, 2014 at 2:29 PM, FRANCISCO JOSE PALAO VILLANUEVA <[email protected]> wrote: > 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. >
Saludos, Lamentablemente eso solo significa que el gestor de base de datos del cual estas migrando no está acatando algo básico del estándar SQL. Aun en la versión de 1992 (hace 22 años), el estándar decía en el capítulo 7 clausula 7.6 que los filtros de la clausula WHERE se aplican *después* de obtener un conjunto de resultados de la clausula FROM. http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt """ 7.6 <where clause> Function Specify a table derived by the application of a <search condition> to the result of the preceding <from clause>. """ Lo que esto implica es que cuando en la clausula WHERE tienes una condición como "and t2.pbv_id = 805" le estas diciendo que del conjunto de resultados que ya obtuvo del FROM (y en el cual hay registros con valores NULL cuando no había correspondiente en t2) deje solo aquellos en los que t2.pbv_id sea igual a 805 y como NULL no es igual a 805 elimina todos los registros con NULL. Y así con las demás condiciones sobre t2 que implican IS NOT NULL (todo aquello que pregunte por un valor conocido o un rango de valores conocidos). -- Jaime Casanova www.2ndQuadrant.com Professional PostgreSQL: Soporte 24x7 y capacitación Phone: +593 4 5107566 Cell: +593 987171157 - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
