Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/02/2012, 18:36
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: 17 años
Puntos: 2658
Respuesta: Join entre dos tablas sin auxiliar

En el contexto de tu consulta, la tabla2 es irrelvante, porque no estás consultando datos sobre la descripción del producto.
Código MySQL:
Ver original
  1.     t1.`user_id`
  2.     `tabla_1` t1
  3.     LEFT JOIN
  4.     (SELECT * FROM `tabla_3` WHERE prod_id = 146) t3 ON t1.`user_id` = t3.`user_id`
  5.     t3.`user_id` IS NULL
  6. GROUP BY t1.`user_id`
La consulta usada no devolvía datos por una consecuencia lógica: Estabas tratando de traer datos de tabla2, pero esta tabla dependía de si la tabla3 devolvía un producto_id válido. El problema es que lo que tu estabas tratando de encontrar eran los casos en que el campo t3.usuario_id es NULL, y si ese campo es NULL, también lo era t3.producto_id, por lo que la tercera tabla jamás devolvería datos.
¿Se entiende?
Para que un LEFT JOIN devuelva datos en un cruce de dos tablas, deberá haber datos relacionados entre la primera y segunda tablas. Pero si se hace un LEFT JOIN entre la segunda y la tercera tablas, sólo lo hará con aquellos de la segunda que sean valores no nulos.
Distinto es si hubieses hecho el LEFT JOIN entre la primera y la tercera tablas (pero hubieses obtenido un producto cartesiano).

PD: Lo que te propuso referenteweb no tiene ningún sentido, porque el LEFT JOIN no devuelve un caracter vacío sino NULL, y NULL no es un caracter vacío, es un puntero a la nada o estado no definido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)