Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/03/2013, 13:11
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 de nuevo LuZBinG:

Creo que efectivamente, entendí mal el enunciado del problema, y te dí una respuesta que no era, pero creo que tampoco termino de entender lo que necesitas .

Vayamos por partes... partiendo de esta consulta:

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)

Observamos que para el artículo 1 existen 4 num_defecto (1287, 1288, 1289, 1290). Hasta aquí creo que no tenemos problemas... Ahora bien, si analizamos tu tabla detalle_articulo para estos num_defectos tenemos esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM detalle_articulo
  2.     -> WHERE num_defecto IN (1287, 1288, 1289, 1290)
  3.     -> ORDER BY num_defecto;
  4. +------+-------------+----------+
  5. | id   | num_defecto | cantidad |
  6. +------+-------------+----------+
  7. |  234 |        1287 |        0 |
  8. |   24 |        1287 |        0 |
  9. |   23 |        1287 |        0 |
  10. |   12 |        1288 |        1 |
  11. |    1 |        1288 |        1 |
  12. |  122 |        1288 |        1 |
  13. |   46 |        1289 |        2 |
  14. |   24 |        1289 |        0 |
  15. |  264 |        1289 |        0 |
  16. +------+-------------+----------+
  17. 9 rows in set (0.00 sec)

Es decir, aparecen 9 registros debido a que NO EXISTE NINGÚN DEFECTO PARA EL num_defecto = 1290 mi pregunta es, ¿Por qué pretendes regresar 12 registros como resultado final? por qué el resultado para el num_defecto = 1290 se debe repetir tres veces?

La consulta que pones te regresa 10 registros, es decir LOS NUEVE QUE CORRESPONDEN A LOS num_defecto que si existen MAS 1 REGISTRO NULL PARA INDICAR QUE NO EXISTE ningún registro para el num_defecto = 1290:

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

¿¿¿Es esto lo que pretendes??? que el registro NULL aparezca tres veces en lugar de 1??? en base a qué criterio???

Saludos
Leo.