Ver Mensaje Individual
  #11 (permalink)  
Antiguo 04/09/2013, 21:22
freedert
 
Fecha de Ingreso: enero-2011
Mensajes: 41
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: inner join con union

Cita:
Iniciado por jurena Ver Mensaje
he replicado tu estructura en la medida en que he podido, he incluido datos y he probado esta consulta que tú probaste, y el resultado sí ha sido el esperado.
Código MySQL:
Ver original
  1. (SELECT mov_articulos.prod_cod, mov_articulos.prod_nom,  SUM(mov_articulos.prod_cant) AS egresos
  2.         FROM mov_articulos
  3.         INNER JOIN mov_factura
  4.         ON mov_factura.nro_factura = mov_articulos.id_comp
  5.         WHERE tipo_comp = 1
  6.         GROUP BY mov_articulos.prod_cod)
  7.                
  8.         UNION
  9.                
  10.         (SELECT mov_prov_articulos.prod_cod, mov_prov_articulos.prod_nom, SUM(mov_prov_articulos.prod_cant) AS ingresos
  11.         FROM mov_prov_articulos
  12.         INNER JOIN mov_prov_factura
  13.         ON mov_prov_factura.nro_factura = mov_prov_articulos.id_comp
  14.         WHERE tipo_comp = 1
  15.         GROUP BY mov_prov_articulos.prod_cod)

Bien hice las siguientes pruebas directamente en la sql del server en vez de en el php para descartar algun error en esa parte. Y descubri algo a ver si a ustedes les cierre, hice esta prueba:

consulte:
Código MySQL:
Ver original
  1. SELECT mov_articulos.prod_cod, mov_articulos.prod_nom, SUM( mov_articulos.prod_cant ) AS egresos
  2. FROM mov_articulos
  3. INNER JOIN mov_factura ON mov_factura.nro_factura = mov_articulos.id_comp
  4. WHERE tipo_comp =1
  5. GROUP BY mov_articulos.prod_cod

RESULTADO: devuelve datos en estas tres columnas: (10 resultados)
prod_cod
prod_nom
egresos

luego consulte:
Código MySQL:
Ver original
  1. (SELECT mov_prov_articulos.prod_cod, mov_prov_articulos.prod_nom, SUM(mov_prov_articulos.prod_cant) AS ingresos
  2.         FROM mov_prov_articulos
  3.         INNER JOIN mov_prov_factura
  4.         ON mov_prov_factura.nro_factura = mov_prov_articulos.id_comp
  5.         WHERE tipo_comp = 1
  6.         GROUP BY mov_prov_articulos.prod_cod)

RESULTADO: Me dio otros datos con estas columnas: (1046 resultados)
prod_cod / prod_nom / ingresos

y por ultimo consulto todo el codigo:
Código MySQL:
Ver original
  1. (SELECT mov_articulos.prod_cod, mov_articulos.prod_nom,  SUM(mov_articulos.prod_cant) AS egresos
  2.         FROM mov_articulos
  3.         INNER JOIN mov_factura
  4.         ON mov_factura.nro_factura = mov_articulos.id_comp
  5.         WHERE tipo_comp = 1
  6.         GROUP BY mov_articulos.prod_cod)
  7.                
  8.         UNION
  9.                
  10.         (SELECT mov_prov_articulos.prod_cod, mov_prov_articulos.prod_nom, SUM(mov_prov_articulos.prod_cant) AS ingresos
  11.         FROM mov_prov_articulos
  12.         INNER JOIN mov_prov_factura
  13.         ON mov_prov_factura.nro_factura = mov_prov_articulos.id_comp
  14.         WHERE tipo_comp = 1
  15.         GROUP BY mov_prov_articulos.prod_cod)

RESULTADO: mismas tres columnas que el principio pero ojo con 1056 resultados.
prod_cod
prod_nom
egresos

Es decir me esta mostrando los resutlados convinados correctamente. Sera que el UNION esta juntando los resultados en uno solo (el primero) y no me deja llamarlos por separado? por eso el segundo alias "ingresos" no tiene contenido??

creo que ahi estaba el problema.. que piensan? de ser asi quizas no pueda recuperar los dos campos por separado y necesite hacer una consulta aparte.