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

INNER JOIN multiplica resultados

Estas en el tema de INNER JOIN multiplica resultados en el foro de Mysql en Foros del Web. Hola, que tal. Es mi primera vez en un foro como estos, vi algunas soluciones a mi problema pero no estoy dando en la tecla ...
  #1 (permalink)  
Antiguo 25/11/2014, 16:53
 
Fecha de Ingreso: noviembre-2014
Mensajes: 1
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta INNER JOIN multiplica resultados

Hola, que tal. Es mi primera vez en un foro como estos, vi algunas soluciones a mi problema pero no estoy dando en la tecla con la real solucion a mi problema.

Lo que necesito es que agrupando por fecha, obtenga la cantidad de kilos que envie.
Código SQL:
Ver original
  1. SELECT DISTINCT
  2.         COUNT(PM.numero) AS cantNumero,
  3.         TE.fecha AS fecha,
  4.         (SUM(DE.peso_unitario) * SUM(AP.cantidad)) AS SumaTotal
  5.  
  6. FROM pedido_modelo PM
  7. INNER JOIN turno_entrega TE ON PM.turno_entrega_id=TE.id
  8. INNER JOIN alimento_pedido AP ON PM.numero=AP.pedido_numero
  9. INNER JOIN detalle_alimento DE ON AP.detalle_alimento_id=DE.id_detallealimento
  10. GROUP BY fecha

Hice una prueba en papel con los resultados que tendria que darme la consulta, pero descubri que me multiplica resultados, es decir, tengo un problema con esta parte en especial:
Código SQL:
Ver original
  1. INNER JOIN alimento_pedido AP ON PM.numero=AP.pedido_numero
En donde yo, por cada pedido (de la tabla 'pedido_modelo') puedo tener varios alimentos (de la tabla 'alimento_pedido').

Para orientar un poco, cuando hago "COUNT(PM.numero)" me tendria que devolver la cantidad de pedidos que tuve en x fecha, sin embargo me devuelve la multiplicacion del numero de pedidos por el numero de alimentos que encargue en esa fecha.

Por ejemplo, pongo fecha primero y pedidos del dia despues.
-01/01/2014
-Tengo 3 pedidos, con 2 alimentos encargados c/u, COUNT(PM.numero) me devuelve 6 cuando deberia devolverme 3.
-02/02/2014
-Tengo 1 pedido, con 3 alimentos encargados, COUNT(PM.numero) me devuelve 3 cuando deberia devolverme 1.

Desde ya muchas gracias, agradeceria una pronta respuesta.
  #2 (permalink)  
Antiguo 26/11/2014, 11:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 7 meses
Puntos: 574
Respuesta: INNER JOIN multiplica resultados

Si lo que quieres es fecha numero de pedidos y kilos total (no por alimentos)


Código MySQL:
Ver original
  1. SELECT TE.fecha AS fecha,
  2.         COUNT(PM.numero) AS Pedidos,
  3.         SUM(DE.peso_unitario*AP.cantidad) Kilos
  4. FROM pedido_modelo PM
  5. INNER JOIN turno_entrega TE ON PM.turno_entrega_id=TE.id
  6. INNER JOIN alimento_pedido AP ON PM.numero=AP.pedido_numero
  7. INNER JOIN detalle_alimento DE ON AP.detalle_alimento_id=DE.id_detallealimento
  8. GROUP BY TE.fecha

es practicamente lo mismo que tenias si no te funciona deberias describir que tienes en cada tabla....no acabo de imaginar que es pedido_modelo.... si eso es la cabecera del pedido debria tener la fecha de entrega no en estar en una tabla de turnos de entrega.....

Pedido
idPedido
fecha
...

DetallePedido
idDetallePedido
idPedido
idAlimento
cantidad

Alimentos
idAlimento
Nombre
Unidades

????????????
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: inner-join, join, sql, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:58.