PDA

Ver la Versión Completa : Ayuda con LEFT JOIN


n03l
19-01-2014, 19:18:52
Saludos, haber si alguien me hecha una ayudita en una consulta SQL.

El asunto es el siguiente: Tengo 3 tablas


CREATE TABLE USUARIOS (
USUARIO VARCHAR(25) NOT NULL
);

/*Datos de la tabla anterior */
USUARIO
USUARIO1
USUARIO2

/*Esta tabla guarda los correos que el usuario a enviado */
CREATE TABLE CORREOS (
DESTINATARIO VARCHAR(200),
MENSAJE VARCHAR(200),
USUARIO VARCHAR(25),
COD INTEGER NOT NULL
);

/*Datos de la tabla anterior */
DESTINATARIO MENSAJE USUARIO COD
JUAN@gmail.com Hola Juan USUARIO1 1
PEDRO@gmail.com Hola Pedro USUARIO2 2
DESCONOCIDO@gmail.com Hola desconocido tu no perteneces a mi lista de contactos USUARIO1 3



CREATE TABLE CONTACTOS (
NOMBRE VARCHAR(30),
CORREO VARCHAR(200),
USUARIO VARCHAR(25)
);

/*Datos de la tabla anterior */
NOMBRE CORREO USUARIO
JUAN JUAN@gmail.com USUARIO1
PEDRO PEDRO@gmail.com USUARIO2
JUAN JUAN@gmail.com USUARIO2



la consulta q hago

select contactos.nombre , correos.destinatario ,correos.usuario , correos.mensaje
from correos

LEFT JOIN usuarios ON correos.usuario =usuarios.usuario

LEFT OUTER JOIN contactos ON contactos.correo =correos.destinatario

Where usuarios.usuario='USUARIO1'

y el resultado es el siguiente:
NOMBRE DESTINATARIO USUARIO MENSAJE
JUAN JUAN@gmail.com USUARIO1 Hola Juan
JUAN JUAN@gmail.com USUARIO1 Hola Juan
DESCONOCIDO@gmail.com USUARIO1 Hola desconocido tu no perteneces a mi lista de contactos



USUARIO1 le envio a JUAN, pero como juan tambien pertenece a los contactos de USUARIO2 me lo repite!!!!

celades1
20-01-2014, 07:10:56
Puedes poner un distinct

n03l
20-01-2014, 16:46:31
Gracias por responder.

Si funciona con distinct pero si algun usuario tiene agregado el contacto con otro Nombre por ejemplo
JUAN HERMANO

y otro solo como JUAN seguiria saliendo repetido.

e intentado hacer esto:
select contactos.nombre , (distinct correos.destinatario ,correos.usuario , correos.mensaje)

para diferenciarlos por los ultimos tres campos, pero no funciona

saludos

VictorPenyalver
20-01-2014, 17:50:54
Prueba con esto,



select contactos.nombre , correos.destinatario ,correos.usuario , correos.mensaje
from correos

LEFT JOIN usuarios ON correos.usuario =usuarios.usuario

LEFT OUTER JOIN contactos ON (contactos.correo = correos.destinatario and contactos.usuario = correos.usuario)

Where usuarios.usuario='USUARIO1'



Asi solo trae los contactos del usuario del correo. Como lo tienes tu, trae todos los contactos que también tengan ese correo.

Saludos!

n03l
20-01-2014, 18:06:06
Gracias VictorPenyalver (http://www.clubdelphi.com/foros/member.php?u=8380) eso era lo que buscaba funciono perfecto, tenia 2 dias en eso. de verda gracias. saludos