Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Join entre dos tablas sin auxiliar

Estas en el tema de Join entre dos tablas sin auxiliar en el foro de Mysql en Foros del Web. Srs. nuevamente pro estos lados, tengo un problema y no trae loco alguien porfavor que me ayude ya que estoy con la soga al cuello ...
  #1 (permalink)  
Antiguo 12/02/2012, 10:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 54
Antigüedad: 16 años, 1 mes
Puntos: 0
Join entre dos tablas sin auxiliar

Srs. nuevamente pro estos lados, tengo un problema y no trae loco alguien porfavor que me ayude ya que estoy con la soga al cuello y necesito presentar esta bendita consulta, les cuento, tengo dos tablas tabla_1, tabla_2, tabla_3:

tabla_1: user_id, nombre, apellido
tabla_2: prod_id, tipo, nombre, activo
tabla_3: id, user_id, prod_id, fecha

En la tabla_1 están mis usuarios, en la tabla_2 están mis productos, y en la tabla_3 se guardan las visitas de mis usuarios para ciertos productos, la consulta es la siguiente, necesito saber que usuarios no han visitado cierto producto o sea que no estén en la tabla_3 para un prod_id en particular. Hice la siguiente consulta, esta me trae todos los usuarios que no están en tabla_3 pero no para un prod_id en particular, si agrego el prod_id no me muestra nada siendo que hay usuarios que faltan por ver ese producto:

Código:
SELECT COUNT(DISTINCT(t1.`user_id`)) AS `total`
FROM `tabla_1` t1 LEFT JOIN `tabla_3` t3 ON t1.`user_id` = t3.`user_id`
LEFT JOIN `tabla_2` t2 ON t3.`prod_id` = t2.`prod_id`
WHERE t2.`prod_id` = 146 AND t3.`user_id` IS NULL GROUP BY t1.`user_id`
Ese es mi problema, por favor una manito para poder sacarme la soga al cuello, gracias de ante mano.
  #2 (permalink)  
Antiguo 12/02/2012, 11:20
Avatar de referenteweb  
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 22
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Join entre dos tablas sin auxiliar

Podrias probar WHERE t3.user == '' GROUP BY t3.user_id

Recuerda que la agrupacion se debe realizar por la tabla que filtra, si eso no te funciona, en la tabla t3 deja el campo user_id con un valor por defecto, por ejemplo 0 y tu consulta la realizas donde t3.user == '0'.

Espero haberte sido de ayuda.

Saludos
  #3 (permalink)  
Antiguo 12/02/2012, 18:08
 
Fecha de Ingreso: noviembre-2008
Mensajes: 54
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Join entre dos tablas sin auxiliar

referenteweb intente lo que me colocaste arriba pero aun así no funciona, todavía sigo intentado.
  #4 (permalink)  
Antiguo 12/02/2012, 18:36
Avatar de 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)
  #5 (permalink)  
Antiguo 13/02/2012, 07:15
 
Fecha de Ingreso: noviembre-2008
Mensajes: 54
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Join entre dos tablas sin auxiliar

gnzsoloyo muchas gracias por tu ayuda, ahora entiendo el problema y ya tengo la solución, gracias nuevamente.
  #6 (permalink)  
Antiguo 31/03/2012, 17:09
 
Fecha de Ingreso: diciembre-2008
Ubicación: Cordoba
Mensajes: 127
Antigüedad: 16 años
Puntos: 17
Respuesta: Join entre dos tablas sin auxiliar

Eres de verdad genial, eres mi nuevo heroe puede que piense que esgracioso pero no

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Aprendi SQL leyendo todas tus respuestas

Etiquetas: joins, myslq
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:24.