[pgsql-ayuda] Problemas con VIEWS

lrgallardo@abl.com.mx lrgallardo@abl.com.mx
Wed, 20 Dec 2000 11:32:23 -0600 (CST)


Mario Coello writes:
 > 
 >     He creado dos tablas, con algún contenido de prueba:
 > 
 >         select * from tabla1;
 > 
 >  idconcepto | total
 > ------------+-------
 >  2          |  2000
 >  1          |  1000
 >  3          |  3000
 >  2          |  2000
 >  3          |  3000
 >  1          |  1000
 > (6 rows)
 > 
 >  select * from tabla2;
 > 
 >  idconcepto | total
 > ------------+-------
 >  2          |  2000
 >  3          |  3000
 >  1          |  1000
 >  4          |  4000
 > (4 rows)
 > 
 > Sobre estas tablas he creado dos vistas:
 >         create view suma1 as select idconcepto, sum(total) from tabla1 group
 > by idconcepto;
 >         create view suma2 as select idconcepto, sum(total) from tabla2 group
 > by idconcepto;
 > 
 >     El problema viene ahora.  Se trata de que el contenido que me muestran
 > las vistas por separado no es el mismo que el que me muestran cuando las
 > visualizo juntas.  Aquí va un ejemplo (directamente copiado de la consola de
 > psql):
 > 
 >  select * from suma1;
 > 
 >  idconcepto | total1
 > ------------+--------
 >  1          |   2000
 >  2          |   4000
 >  3          |   6000
 > (3 rows)
 > 
 >  select * from suma2;
 > 
 >  idconcepto | total2
 > ------------+--------
 >  1          |   1000
 >  2          |   2000
 >  3          |   3000
 >  4          |   4000
 > (4 rows)
 > 
 >  select * from suma1, suma2 where suma1.idconcepto = suma2.idconcepto;
 >  idconcepto | total1 | idconcepto | total2
 > ------------+--------+------------+--------
 >  1          |   2000 | 1          |   2000
 >  2          |   4000 | 2          |   4000
 >  3          |   6000 | 3          |   6000
 > (3 rows)
 > 
 > ¿Alguien puede decirme qué sucede?  ¿Es normal o es un fallo del PostgreSQL?
 > Gracias a todos.
Es normal. Para ver que está pasando, expande la sentencia que se ejecuta:

select t2.id, sum(t1.tot), sum(t2.tot) from tabla1 t1, tabla2 t2 where t1.id=t2.id group by t2.id;

y ejecutala quitando el group by:

select t2.id, sum(t1.tot), sum(t2.tot) from tabla1 t1, tabla2 t2 where t1.id=t2.id;

Esto te regresa: 

 id | tot  | tot  
----+------+------
  1 | 1000 | 1000
  1 | 1000 | 1000
  2 | 2000 | 2000
  2 | 2000 | 2000
  3 | 3000 | 3000
  3 | 3000 | 3000
(6 rows)

Que al totalizar da lo que encontraste. Si te preguntas por que es
así, es por que en tu tabla 1 hay dos hileras para cada id.

Le paso al alguien más la bolita de como resolver tu pregunta original
:-)

-- 
--------- Pie de mensaje -------------------------------------------
Archivo historico: http://tlali.iztacala.unam.mx/maillist/pgsql-ayuda
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe pgsql-ayuda