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

Consulta a 3 tablas

Estas en el tema de Consulta a 3 tablas en el foro de Mysql en Foros del Web. Buenos días tengo el siguiente problema y nos soy capaz de resolverlo, he mirado con INNER JOIN, pero no soy capaz, si podeis ayudarme... Tabla ...
  #1 (permalink)  
Antiguo 22/12/2017, 00:40
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 7 años
Puntos: 0
Consulta a 3 tablas

Buenos días tengo el siguiente problema y nos soy capaz de resolverlo, he mirado con INNER JOIN, pero no soy capaz, si podeis ayudarme...

Tabla 1 principal

id_tabla1
Nombre

Tabla 2

id_tabla2
TotalIngresos
id_tabla1

Tabla 3

id_tabla3
TotalPagos
id_tabla1

Tengo 3 tablas relacionadas con el id_tabla1 (es la principal), necesito extraer los resultados de las otras 2 tablas si existe el "id_tabla1".

RESULTADO SIMILARA ESTO: (este caso si el id_tabla1, esta en todas las tablas)
id_tabla1 Nombre TotalIngresos TotalPagos
1 PEPE 10 10


RESULTADO SIMILARA ESTO: (este caso si el id_tabla1, este solo en una de las secundarias)
id_tabla1 Nombre TotalIngresos TotalPagos
1 PEPE 10

Espero haberme explicado.

Gracias
  #2 (permalink)  
Antiguo 22/12/2017, 08:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta a 3 tablas

que es lo que has intentado, que resultado regresa y que resultado esperas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/12/2017, 10:56
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 7 años
Puntos: 0
Respuesta: Consulta a 3 tablas

Lo primero, gracias por interesarte,

intento lo siguiente:

3 tablas:

tabla_cuenta
tabla_emitidas
tabla_cobros

Me gustaria que cuando tengo una cuenta de alta y tenga una factura emitida con esa cuenta la muestre y las agrupe sumando la columna

tabla_cuentas

idcuenta nombre
1 NEGOCIO
2 NEGOCIO 2

tabla_emitidas

cuenta factura_emitida

1 100
1 50
2 30

RESULTADO

cuenta importe
1 150
2 30

Pero además entra la tercera tabla de cobros

tabla_cobros

cuenta importe
1 50


RESULTADO

cuenta importe cobros resultado
1 150 50 100
2 30 -- 30

No se si me he explicado bien.

Gracias de nuevo
  #4 (permalink)  
Antiguo 22/12/2017, 11:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta a 3 tablas

Primero hariamos la suma de las 2 tablas:


Código MySQL:
Ver original
  1. select t1.id_cuenta, sum(t2.importe) as total form tabla_cuenta as t1
  2. inner join tabla_emitidas as t2 on (t1.idcuenta=t2.idcuenta)
  3. group by t1.id_cuenta

Ahora unimos la tercera tabla para sacar los cobros

Código MySQL:
Ver original
  1. select suma.*, t3.cobros, suma.total-t3.cobros as gran_total from(
  2. select t1.id_cuenta, sum(t2.importe) as total form tabla_cuenta as t1
  3. inner join tabla_emitidas as t2 on (t1.idcuenta=t2.idcuenta)
  4. group by t1.id_cuenta
  5. ) as suma
  6. inner join tabla_cobros as t3 on (suma.idcuenta=t3.idcuenta)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 23/12/2017, 15:42
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 7 años
Puntos: 0
Respuesta: Consulta a 3 tablas

Gracias por contestar, entonces se quedaría así:

select t1.id_cuenta, sum(t2.importe) as total form tabla_cuenta as t1
inner join tabla_emitidas as t2 on (t1.idcuenta=t2.idcuenta)
group by t1.id_cuenta

UNION

select suma.*, t3.cobros, suma.total-t3.cobros as gran_total from(
select t1.id_cuenta, sum(t2.importe) as total form tabla_cuenta as t1
inner join tabla_emitidas as t2 on (t1.idcuenta=t2.idcuenta)
group by t1.id_cuenta
) as suma
inner join tabla_cobros as t3 on (suma.idcuenta=t3.idcuenta)

Gracias
  #6 (permalink)  
Antiguo 23/12/2017, 19:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Consulta a 3 tablas

No, porque el union? no estas viendo que uso el primer query en el segundo? Creo que te hace falta ver mas bax.......

solo usa este query:

Código MySQL:
Ver original
  1. select suma.*, t3.cobros, suma.total-t3.cobros as gran_total from(
  2. select t1.id_cuenta, sum(t2.importe) as total form tabla_cuenta as t1
  3. inner join tabla_emitidas as t2 on (t1.idcuenta=t2.idcuenta)
  4. group by t1.id_cuenta
  5. ) as suma
  6. inner join tabla_cobros as t3 on (suma.idcuenta=t3.idcuenta)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 29/12/2017, 11:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 11 años, 8 meses
Puntos: 574
Respuesta: Consulta a 3 tablas

Código MySQL:
Ver original
  1. SELECT c.idcuenta, c.nombre, NZ(fac.emitidas) as facturasEmitidas, NZ(cbr.cobradas) as facturasCobradas, NZ(fac.emitidas)-NZ(cbr.cobradas) as facturasPendientes
  2. FROM (tabla_cuentas as c
  3.                LEFT JOIN
  4.               (SELECT cuenta, SUM(factura_emitida) as emitidas FROM tabla_emitidas
  5.                 GROUP BY cuenta) as fac ON c.idcuenta=fac.cuenta)
  6.               LEFT JOIN
  7.               (SELECT cuenta, SUM(importe) as cobradas FROM tabla_cobros
  8.                 GROUP BY cuenta) as cbr ON c.idcuenta=cbr.cuenta
  9. ORDER BY c.nombre;

No se yo esa estructura de tablas... pero lo que quieres sale con esto, ojo los que no hayan emitido facturas tambien saldran....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: ip, tabla, tablas
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 19:47.