Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

combinar dos consultas

Estas en el tema de combinar dos consultas en el foro de Mysql en Foros del Web. Una consulta me devuelve los movimientos de la cuenta proveedores, y otra toma, del libro contable general, los movimientos de caja por los cuales se ...
  #1 (permalink)  
Antiguo 14/10/2008, 14:41
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
combinar dos consultas

Una consulta me devuelve los movimientos de la cuenta proveedores, y otra toma, del libro contable general, los movimientos de caja por los cuales se hicieron pagos a los proveedores.
Necesitaría unir estas dos consultas para poder imprimir en pantalla una tabla que tenga los movimientos de una y otra, ordenados por fecha.

Consulta 1:
SELECT * , po.comentarios AS com, DATE_FORMAT( po.fecha, '%d-%m-%Y' ) AS fecham
FROM proveedores_operaciones po
WHERE id_proveedor = '51'
ORDER BY po.fecha DESC ;

Consulta 2:
SELECT * , co.comentarios AS com, DATE_FORMAT( co.fecha, '%d-%m-%Y' ) AS fecham
FROM contable_operaciones co
WHERE co.id_proveedor = '51'
ORDER BY co.fecha DESC , co.id DESC ;

Actualmente, imprimo primero una cosa, y seguido la otra. Cuando hay pocos movimientos es fácil, pero la empresa está creciendo y comienza a haber varias líneas de movimientos en pocas semanas.

¿alguien puede ayudarme?
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #2 (permalink)  
Antiguo 14/10/2008, 15:16
Avatar de DjFaramir  
Fecha de Ingreso: febrero-2003
Ubicación: La Plata, Buenos Aires, Argentina
Mensajes: 131
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: combinar dos consultas

Podrias hacerlo con un JOIN:

FROM proveedores_operaciones as po
JOIN contable_operaciones as co
ON (po.id_proveedor = co.id_proveedor)

el problema puede llegar a ser que tengas los mismos nombres de campos en las dos tablas, asi que tendrias que llamarlos uno por uno y renombrarlos... ya que si traer "id_proveedor" desde las dos tablas, te lo va a reconocer como ambiguo y te va a dar error...
pero podrias traerlo y renombrarlo a po_id_proveedor y listo...
__________________
See you... y Tolkien... mucho Tolkien...
  #3 (permalink)  
Antiguo 14/10/2008, 17:54
 
Fecha de Ingreso: junio-2007
Mensajes: 11
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: combinar dos consultas

Y si tienes los mismo nombres en ambas tablas puedes solucionarlo con un "UNION"

(
SELECT * , po.comentarios AS com, DATE_FORMAT( po.fecha, '%d-%m-%Y' ) AS fecham
FROM proveedores_operaciones po
WHERE id_proveedor = '51'
ORDER BY po.fecha DESC
)
UNION
(
SELECT * , co.comentarios AS com, DATE_FORMAT( co.fecha, '%d-%m-%Y' ) AS fecham
FROM contable_operaciones co
WHERE co.id_proveedor = '51'
ORDER BY co.fecha DESC , co.id DESC
)


El UNION funciona solamente cuando tienes la misma cantidad de campos en las dos consulta y los mismos nombres.


Saludos
  #4 (permalink)  
Antiguo 15/10/2008, 02:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: combinar dos consultas

Coincido con m87laucha en que lo que buscas lo encontrarás mediante una union all
(
SELECT po.comentarios AS com, DATE_FORMAT( po.fecha, '%d-%m-%Y' ) AS fecham, 'proveedores' as tabla
FROM proveedores_operaciones po
WHERE id_proveedor = '51'
)
UNION ALL
(
SELECT co.comentarios AS com, DATE_FORMAT( co.fecha, '%d-%m-%Y' ) AS fecham, 'contable' as tabla
FROM contable_operaciones co
WHERE co.id_proveedor = '51'
)
ORDER BY fecham

Lo importante es que el número de campos sea el mismo (no es necesario que lo sea el nombre) y también el tipo de campos. Te he puesto para que ordene por fecha después, aunque eso mezclará los datos de las tablas: de ahí que yo haya añadido a la consulta un dato para que distingas una de otra, un dato absoluto. Si quieres ordenar cada una de las tablas y luego unirlas, hazlo como te recomendó m87laucha.

Última edición por jurena; 15/10/2008 a las 07:42
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:35.