Ver Mensaje Individual
  #19 (permalink)  
Antiguo 06/09/2013, 07:29
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: inner join con union

Cita:
(aclaro una situacion, no se va a dar nunca la posibildad de diferir entre las tablas, siempre que exista un producto en la tabla mov_articulos tiene que haber su referente factura en al tabla mov_factura y al revez, por lo que creo que es indistinto si es right o left por ejemplo) si mal no entiendo claro esta.
Dos cosas a destacar:
Aunque pueda parecer que "nunca" pueda existir una discrepancia entre productos de ambas tablas, eso no lo puedes garantizar jamás al 100% por una cuestión simplísima: Siempre existe la posibilidad que dado un periodo de tiempo determinado, un producto dado tenga movimientos de compra y no de venta, o de venta y no compra. Siempre ocurre.
Puede suceder, incluso, que un producto se haya comprado, y jamás se venda. Sucede...

Es más, es posible que si intentas realizar un reporte desagregado por Años, Meses, semanas, Dias y hasta horas del día, no exista plena coincidencia, puesto que incluso en una misma semana el mismo producto puede tener uno de los movimietnos y no el otro, o no tener ni uno ni otro.
Nadie que diseñe una base de datos para ventas, de ningún tipo, deja de agregar una tabla productos, porque el producto, entre otras cosas, no es un atributo de movimiento, sino que un movimiento está relacionado con un producto, y por tanto es Producto es una entidad independiente.
En otras palabras, si creaste una base de datos así, sin una tabla productos, simplemente lo has creado MAL, y conspira contra la efectividad del reporte.

Además, ¿me puedes explicar cómo sabes qué producto vender, y sus destalles descriptivos, sin tener una tabla producto?
No tenerla, implciaría consultas de demasiada complejdiad como apra ser un sistema eficiente.

Por otro lado, no es lo mismo hablar de LEFT JOIN que de RIGHT JOIN. Si las igualas es que no estás comprendiendo correctamente el sentido de ese tipo de consultas.
LEFT JOIN devuelve todo lo que está en la tabla izquierda del JOIN, tenga o no coincidencias con la derecha. Pero si aplicases a la inversa el RIGHT JOIN, sólo devolvería lo que existe en la derecha, aunque no coincida con nada de la primera tabla.
En ese contexto, como te imaginarás, realizar un LEFT JOIN o RIGHT JOIN entre los dos bloques de consultas (egreso e ingreso), pueden dar resultados erróneos.

Mi sugerencia es que si no tienes la tabla producto, la crees. A partir de allí se puede poblar con lo que ya existe.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)