Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/07/2012, 09:55
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta relacionada con posibles registros inexistentes

Pues obviamente algo de cómo la probaste no es correcto, porque si tomo los datos que tienes y creo las tablas, cargándolas con esos datos tendría:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS PRODUCTO, VENTA;
  2. Query OK, 0 rows affected (0.01 sec)
  3.  
  4. mysql> CREATE TABLE producto(
  5.     ->     ID INT UNSIGNED PRIMARY KEY,
  6.     ->     NOMBRE VARCHAR(50));
  7. Query OK, 0 rows affected (0.01 sec)
  8.  
  9. mysql> CREATE TABLE venta(
  10.     ->     IDVENTA INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  11.     ->     ID INT UNSIGNED,
  12.     ->     CANTIDADVENDIDA INT UNSIGNED);
  13. Query OK, 0 rows affected (0.01 sec)
  14.  
  15. mysql> INSERT INTO PRODUCTO
  16.     -> VALUES
  17.     ->     (1, 'Panes'),
  18.     ->     (2, 'Milanesas'),
  19.     ->     (3, 'Figasas'),
  20.     ->     (4, 'Quesos');
  21. Query OK, 4 rows affected (0.00 sec)
  22. Records: 4  Duplicates: 0  Warnings: 0
  23.  
  24. mysql> INSERT INTO venta(ID, CantidadVendida)
  25.     -> VALUES (1, 5), (3, 2);
  26. Query OK, 2 rows affected (0.00 sec)
  27. Records: 2  Duplicates: 0  Warnings: 0

Ahora puedo ejecutar la consulta que te propuse, con un agregado para hacer que los NULL se transformen en ceros:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     P.id,
  3.     ->     P.nombre,
  4.     ->     IFNULL(SUM(v.cantidadvendida), 0) cantidadvendida
  5.     -> FROM
  6.     ->     producto P
  7.     ->     LEFT JOIN venta V ON P.id = V.id
  8.     -> GROUP BY P.id;
  9. +----+-----------+-----------------+
  10. | id | nombre    | cantidadvendida |
  11. +----+-----------+-----------------+
  12. |  1 | Panes     |               5 |
  13. |  2 | Milanesas |               0 |
  14. |  3 | Figasas   |               2 |
  15. |  4 | Quesos    |               0 |
  16. +----+-----------+-----------------+
  17. 4 rows in set (0.00 sec)

Y como para que veas que si le quito el IFNULL el resultado es el mismo:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     P.id,
  3.     ->     P.nombre,
  4.     ->     SUM(v.cantidadvendida) cantidadvendida
  5.     -> FROM
  6.     ->     producto P
  7.     ->     LEFT JOIN venta V ON P.id = V.id
  8.     -> GROUP BY P.id;
  9. +----+-----------+-----------------+
  10. | id | nombre    | cantidadvendida |
  11. +----+-----------+-----------------+
  12. |  1 | Panes     |               5 |
  13. |  2 | Milanesas |            NULL |
  14. |  3 | Figasas   |               2 |
  15. |  4 | Quesos    |            NULL |
  16. +----+-----------+-----------------+
  17. 4 rows in set (0.00 sec)

En resumen: El error se debe estar produciendo en la ejecución que haces tu, y no en los datos o la sentencia que te planteo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)