Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/03/2012, 09:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Relación de dos tablas con un solo registro de la segunda tabla

Hola clarkpler:

Con gusto trataré de explicar la consulta, para que se entienda mejor. T1, T2, y T3 son alias:
Código:
tabla1 T1
(SELECT MIN(id_fotografia) min_id, id_album FROM tabla2 GROUP BY id_album) T2 
tabla2 T3 
Si observas, tanto en la subconsulta como en el último JOIN hago referencia a la misma tabla2. La idea de la sobconsulta es obtener el mínimo ID para cada album:

Código MySQL:
Ver original
  1. mysql> SELECT MIN(id_fotografia) min_id, id_album
  2.     -> FROM tabla2 GROUP BY id_album;
  3.  
  4. +--------+----------+
  5. | min_id | id_album |
  6. +--------+----------+
  7. |      1 |        1 |
  8. |      4 |        2 |
  9. |      6 |        3 |
  10. +--------+----------+
  11. 3 rows in set (0.00 sec)

Esta tabla te sirve para filtrar justamente los resultados, observa en el siguiente ejemplo, que si no utilizo esta subconsulta para filtrar la información, el resultado es el mismo que se obtiene con la consulta que tú intentaste:

Código MySQL:
Ver original
  1. mysql> SELECT T1.*, T3.*
  2.     -> FROM tabla1 T1
  3.     -> LEFT JOIN tabla2 T3
  4.     -> ON T3.id_album = T1.id_album;
  5. +----------+---------+-----------+---------------+----------------+----------+
  6. | id_album | nombre  | categoria | id_fotografia | url_fotografia | id_album |
  7. +----------+---------+-----------+---------------+----------------+----------+
  8. |        1 | album 1 | familia   |             1 | papa.jpg       |        1 |
  9. |        1 | album 1 | familia   |             2 | mama.jpg       |        1 |
  10. |        1 | album 1 | familia   |             3 | hermano.jp     |        1 |
  11. |        2 | album 2 | amigos    |             4 | victor.jpg     |        2 |
  12. |        2 | album 2 | amigos    |             5 | ßngel.jpg      |        2 |
  13. |        3 | album 3 | autos     |             6 | mustang.jp     |        3 |
  14. |        3 | album 3 | autos     |             7 | vocho.jpg      |        3 |
  15. |        4 | vacio   | otro      |          NULL | NULL           |     NULL |
  16. +----------+---------+-----------+---------------+----------------+----------+
  17. 8 rows in set (0.00 sec)
  18.  
  19. mysql> SELECT * FROM tabla1 LEFT JOIN tabla2 USING (id_album);
  20. +----------+---------+-----------+---------------+----------------+
  21. | id_album | nombre  | categoria | id_fotografia | url_fotografia |
  22. +----------+---------+-----------+---------------+----------------+
  23. |        1 | album 1 | familia   |             1 | papa.jpg       |
  24. |        1 | album 1 | familia   |             2 | mama.jpg       |
  25. |        1 | album 1 | familia   |             3 | hermano.jp     |
  26. |        2 | album 2 | amigos    |             4 | victor.jpg     |
  27. |        2 | album 2 | amigos    |             5 | ßngel.jpg      |
  28. |        3 | album 3 | autos     |             6 | mustang.jp     |
  29. |        3 | album 3 | autos     |             7 | vocho.jpg      |
  30. |        4 | vacio   | otro      |          NULL | NULL           |
  31. +----------+---------+-----------+---------------+----------------+
  32. 8 rows in set (0.00 sec)

Si tienes alguna otra duda con gusto tratamos de ayudarte.

Saludos
Leo.