Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/05/2012, 07:32
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 1 mes
Puntos: 447
Respuesta: LEFT JOIN con posibles múltiples resultados a la parte derecha

Hola de nuevo...

Sigues sin ponernos datos de ejemplo y así será difícil tratar de ayudarte... un error típico al utilizar LEFT JOIN'S colocar adecuadamente las condiciones para filtrar la información... hay que identificar qué condiciones puedes colocar en la sección ON de JOIN y qué condiciones poner en el WHERE, acabo de contestar otro post en donde aplico este detalle, imagina que tienes dos tablas así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | campo_texto |
  4. +------+-------------+
  5. |    1 | Texto aaaa  |
  6. |    2 | Texto bbbb  |
  7. |    3 | Texto cccc  |
  8. |    4 | Texto dddd  |
  9. |    5 | Texto eeee  |
  10. +------+-------------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM tablaB;
  14. +------+------------+------------+
  15. | id   | id_tabla_A | id_usuario |
  16. +------+------------+------------+
  17. |    1 |          2 |          1 |
  18. |    2 |          3 |          1 |
  19. |    3 |          4 |          2 |
  20. |    4 |          2 |          3 |
  21. |    5 |          3 |          3 |
  22. |    6 |          5 |          1 |
  23. +------+------------+------------+
  24. 6 rows in set (0.00 sec)

el resultado que quieres obtener sería la tablaA más una columna que indique si el texto está asignado al usuario 3, es decir algo como esto:

Código MySQL:
Ver original
  1. +------+-------------+-----------+
  2. | id   | campo_texto | postulado |
  3. +------+-------------+-----------+
  4. |    1 | Texto aaaa  | false     |
  5. |    2 | Texto bbbb  | true      |
  6. |    3 | Texto cccc  | true      |
  7. |    4 | Texto dddd  | false     |
  8. |    5 | Texto eeee  | false     |
  9. +------+-------------+-----------+

Por lo tanto debes colocar un filtro para el usuario, pero observa el comportamiento si se coloca en el ON o en el WHERE:


Código MySQL:
Ver original
  1. mysql> SELECT tablaA.id, tablaA.campo_texto,
  2.     -> IF(tablaB.id IS NULL, 'false', 'true') postulado
  3.     -> FROM tablaA
  4.     -> LEFT JOIN tablaB ON TablaA.id = tablaB.id_tabla_a
  5.     -> WHERE tablaB.id_usuario = 3;
  6. +------+-------------+-----------+
  7. | id   | campo_texto | postulado |
  8. +------+-------------+-----------+
  9. |    2 | Texto bbbb  | true      |
  10. |    3 | Texto cccc  | true      |
  11. +------+-------------+-----------+
  12. 2 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT tablaA.id, tablaA.campo_texto,
  15.     -> IF(tablaB.id IS NULL, 'false', 'true') postulado
  16.     -> FROM tablaA
  17.     -> LEFT JOIN tablaB ON TablaA.id = tablaB.id_tabla_a
  18.     -> AND tablaB.id_usuario = 3;
  19. +------+-------------+-----------+
  20. | id   | campo_texto | postulado |
  21. +------+-------------+-----------+
  22. |    1 | Texto aaaa  | false     |
  23. |    2 | Texto bbbb  | true      |
  24. |    3 | Texto cccc  | true      |
  25. |    4 | Texto dddd  | false     |
  26. |    5 | Texto eeee  | false     |
  27. +------+-------------+-----------+
  28. 5 rows in set (0.00 sec)

Esto mismo puede estar ocurriendo en tu caso, aunque insisto, sin datos de ejemplo sólo estoy tratando de adivinar.

Saludos
Leo.