Pregunta

Tengo 3 tablas

[contact]
------------------
cID (PRIMARY KEY, INT) || name || lastupdate (TIMESTAMP)

[phone]
----------------------
cID (FOREIGN KEY, linked to contact.cID) || phonenumber || pID (phone number ID, since each contact can have many numbers)

[email]
------------------------
cID (FOREIGN KEY) || email

Necesito hacer una consulta de selección que va a obtener todos los cID de cada contacto, su nombre, su número de teléfono si el pID es 1 y su correo electrónico, todo en una tabla.De modo que el resultado sería parecido a este, por ejemplo.

cID   |   name             |   phone1  |  email
----------------------------------------------
45    |  John Smith         |  1234567  |  john.s@test.com
46    |  Darth Vader        |  9999999  |  vader@deathstar.org
47    |  Yoda               |  1236547  |  
-----------------------------------------------------------------------------

He intentado hacerlo como este

SELECT contact.cID, name, phone, email FROM contact, phone, email 
WHERE contact.cID = phone.cID AND contact.cID = email.cID AND phone.pID = 1;

Esto casi lo hace, pero si un contacto no tiene un número de teléfono o un correo electrónico con su nombre, a continuación, van a ser dejados de lado.
Necesito mostrar todos los contactos, sin importar el clima que tiene un correo electrónico o un número de teléfono en la base de datos.

¿Cómo puedo lograr esto?

¿Fue útil?

Solución

Select c.cID, C.name, P.phone As phone1, E.email
From contact As C
    Left Join phone As P
        On P.cID = C.cID
            And P.pID = 1
    Left Join email As E
        On E.cID = C.cID

En pocas palabras, usted necesita para poner los criterios para la pID = 1 en la cláusula ON a la hora de incorporarse phone a contact.Además, usted necesita utilizar la Izquierda se Une para manejar el caso en el que no tienen un teléfono o correo electrónico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top