Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2013, 12:40
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Simple left join no me funciona

Hola LuZBinG:

El resultado es perfectamente normal, por lo que tu problema está en la información, no en la consulta, veamos.

La consulta que pones:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM articulo_defecto WHERE id_articulo = 1;
  2. +-------------+-------------+-------------+
  3. | id_articulo | num_defecto | descripcion |
  4. +-------------+-------------+-------------+
  5. |           1 |        1287 | lata        |
  6. |           1 |        1288 | botella     |
  7. |           1 |        1289 | pastas      |
  8. |           1 |        1290 | pastas      |
  9. +-------------+-------------+-------------+
  10. 4 rows in set (0.02 sec)

Efectivamente te regresa 4 registros, pero observa los num_defectos... para el caso del num_defecto 1287, EXISTEN TRES REGISTROS QUE CUMPLEN CON LA CONDICIÓN ON DEL JOIN:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM detalle_articulo WHERE num_defecto = 1287;
  2. +------+-------------+----------+
  3. | id   | num_defecto | cantidad |
  4. +------+-------------+----------+
  5. |  234 |        1287 |        0 |
  6. |   24 |        1287 |        0 |
  7. |   23 |        1287 |        0 |
  8. +------+-------------+----------+
  9. 3 rows in set (0.00 sec)

Cada uno de estos tiene un ID distinto... lo mismo para los otros num_defectos.
Si la relación entre tus tablas fuera de 0 a 1 (es decir, pudiera existir y si existe sólo existe una vez) entonces si, el resultado del LEFT JOIN deberían ser también 4 registros, no más...

Aquí hay de dos sopas... o te falta algún otro criterio en el ON o lo que puedes hacer es CONSOLIDAR (sumar) tus registros en la tabla detalle_articulo para que sólo arroje un resultado por num_defecto, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT A.num_defecto, IFNULL(D.total_cantidad, 0) cantidad
  2.     -> FROM articulo_defecto A
  3.     -> LEFT JOIN
  4.     -> ( SELECT num_defecto, SUM(cantidad) total_cantidad
  5.     ->   FROM detalle_articulo
  6.     ->   GROUP BY num_defecto ) D ON A.num_defecto = D.num_defecto
  7.     -> WHERE A.id_articulo = 1;
  8. +-------------+----------+
  9. | num_defecto | cantidad |
  10. +-------------+----------+
  11. |        1287 |        0 |
  12. |        1288 |        3 |
  13. |        1289 |        2 |
  14. |        1290 |        0 |
  15. +-------------+----------+
  16. 4 rows in set (0.00 sec)

Pero te repito, no sé si este es el resultado que esperas. Dale un vistazo y nos comentas.

Saludos
Leo.