Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda con LEFT JOIN (https://www.clubdelphi.com/foros/showthread.php?t=85054)

n03l 19-01-2014 19:18:52

Ayuda con LEFT JOIN
 
Saludos, haber si alguien me hecha una ayudita en una consulta SQL.

El asunto es el siguiente: Tengo 3 tablas

Código SQL [-]
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

Código SQL [-]
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:
Código SQL [-]
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:
Código SQL [-]
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

Consulta
 
Prueba con esto,

Código SQL [-]

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 eso era lo que buscaba funciono perfecto, tenia 2 dias en eso. de verda gracias. saludos


La franja horaria es GMT +2. Ahora son las 16:56:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi