Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/04/2011, 11:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: posible consulta vacia

Hola cucuru:

Para este tipo de consultas es necesario utilizar LEFT JOIN, lamentablemente no das mucha información acerca de la estructura de sus tablas o algunos datos de ejemplo, así es que tratando de adivinar qué es lo que quiere hacer arme un pequeño ejemplo de cómo se usaría el LEFT JOIN en este caso:

Código MySQL:
Ver original
  1. mysql> create table usuarios (usuarioID int, nombre varchar(20));
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> insert into usuarios values (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.05 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> select * from usuarios;
  9. +-----------+--------+
  10. | usuarioID | nombre |
  11. +-----------+--------+
  12. |         1 | uno    |
  13. |         2 | dos    |
  14. |         3 | tres   |
  15. +-----------+--------+
  16. 3 rows in set (0.02 sec)
  17.  
  18. mysql> create table multas (multasID int, usuarioID int, descripcion varchar(20));
  19. Query OK, 0 rows affected (0.06 sec)
  20.  
  21. mysql> insert into multas values (1, 1, 'exceso velocidad'),
  22.     -> (2, 1, 'semáforo en rojo'),
  23.     -> (3, 2, 'mal estacionado');
  24. Query OK, 3 rows affected (0.03 sec)
  25. Records: 3  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> select * from multas;
  28. +----------+-----------+------------------+
  29. | multasID | usuarioID | descripcion      |
  30. +----------+-----------+------------------+
  31. |        1 |         1 | exceso velocidad |
  32. |        2 |         1 | semáforo en rojo |
  33. |        3 |         2 | mal estacionado  |
  34. +----------+-----------+------------------+
  35. 3 rows in set (0.00 sec)
  36.  
  37. mysql> select u.nombre, M3.descripcion from usuarios u left join
  38.     -> (
  39.     -> select M1.* from multas M1
  40.     -> inner join
  41.     -> (select usuarioID, max(multasID) maxMultasID from multas
  42.     -> group by usuario ID)
  43.     -> M2 on M1.multasid = M2.maxMultasID
  44.     -> ) M3 on u.usuarioID = M3.usuarioID;
  45. +--------+------------------+
  46. | nombre | descripcion      |
  47. +--------+------------------+
  48. | uno    | semáforo en rojo |
  49. | dos    | mal estacionado  |
  50. | tres   | NULL             |
  51. +--------+------------------+
  52. 3 rows in set (0.02 sec)

Como podrás observar el usuario uno (1) tiene dos multas, la consulta te regresa la que tiene el máximo id. El usuario tres no tiene ninguna multa, por lo que la descripción de la multa aparece como NULL.

Te repito, estoy adivinando lo que quieres hacer con la información que proporcionaste, si el código no te sirve te pido que nos expliques un poco mejor qué es lo que quieres hacer, que nos digas la estructura de tus tablas y nos pongas algunos datos de ejemplo. Entre más información nos puedas dar más fácil será tratar de ayudar.

Saludos
Leo.