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

No sé como hacerlo....

Estas en el tema de No sé como hacerlo.... en el foro de Mysql en Foros del Web. Hola a todos de nuevo ;) Os expongo un problema que tengo y no sé como solucionar. Diseño de tablas, las que están en naranja ...
  #1 (permalink)  
Antiguo 31/01/2013, 09:28
 
Fecha de Ingreso: septiembre-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
No sé como hacerlo....

Hola a todos de nuevo ;)

Os expongo un problema que tengo y no sé como solucionar.

Diseño de tablas, las que están en naranja



Tengo la tabla albarans de la que cuelgan dos comandes_albarans_families y albarans_familes con relación de 1 albarán a muchos en las dos.

Lo que quiero conseguir es con una query que me diga la suma de las entradas de comandes_albarans_families y de albarans_families por albaran.

Yo he pensado esta query:

Código MySQL:
Ver original
  1. select id_albara, codi_albara, data, tipus_prov_treb,
  2. ROUND(coalesce(sum(caf.quantitat*caf.multiplicatiu),0),2) as materials,
  3. ROUND(coalesce(sum(af.quantitat*af.multiplicatiu),0),2) as stock  
  4. from albarans
  5. left join comandes_albarans_families as caf using (id_albara)
  6. left join albarans_families as af using (id_albara)
  7. group by id_albara

Pero los resultados no son correctos, por ejemplo.

Tengo un registro en la tabla albarans con id 5691

y en las otras dos tablas tengo:

comandes_albarans_families
id_albara id_familia quantitat multiplicatiu
5691 2 41.87 1
5691 2 247.44 1
5691 2 204.81 1

albarans_families
id_albara id_familia quantitat multiplicatiu
5691 2 8.5 1

Pues al ejecutar la query

Código MySQL:
Ver original
  1. select id_albara, codi_albara, data, tipus_prov_treb,
  2. ROUND(coalesce(sum(caf.quantitat*caf.multiplicatiu),0),2) as materials,
  3. ROUND(coalesce(sum(af.quantitat*af.multiplicatiu),0),2) as stock  
  4. from albarans
  5. left join comandes_albarans_families as caf using (id_albara)
  6. left join albarans_families as af using (id_albara)
  7. where id_albara=5691
  8. group by id_albara

Me devuelve:

id_albara codi_albara data tipus_prov_treb materials stock
5691 5691 2008-11-27 proveidor 494.12 25.50

Es decir en stock debería de ser 8.5 pero me lo suma tres veces porque en la tabla de comandes_albarans_families hay tres filas.

No se como puedo obtener los resultados correctos.

Gracias por todo y saludos.
  #2 (permalink)  
Antiguo 31/01/2013, 09:55
 
Fecha de Ingreso: septiembre-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: No sé como hacerlo....

Una posible solución sería esta:

Código MySQL:
Ver original
  1. select id_albara, codi_albara, data, tipus_prov_treb,
  2. ROUND(coalesce(materials,0),2) as materials,
  3. ROUND(coalesce(stock,0),2) as stock  
  4. from albarans
  5. left join (select id_albara, sum(quantitat*multiplicatiu) as materials from comandes_albarans_families group by id_albara)
  6. T1 using (id_albara)
  7. left join (select id_albara, sum(quantitat*multiplicatiu) as stock from albarans_families group by id_albara)
  8. T2 using (id_albara)

Pero es muy muy lenta, 32 segundos.

Saludos

Etiquetas: join, resultados, select, tabla
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 13:09.