Domanda

Ho 3 tavolini

[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
.

Ho bisogno di creare una query di selezione che recupera tutto il CID di ciascun contatto, il loro nome, il loro numero di telefono se il PID è 1 e la loro e-mail tutto in una tabella. Quindi l'uscita sarà simile ad esempio.

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

Ho provato a farlo come questo

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

Questo quasi lo fa, ma se un contatto non ha un numero di telefono o un'e-mail con il loro nome, allora saranno lasciati fuori.
Ho bisogno di mostrare tutti i contatti, indipendentemente dal tempo che hanno un'e-mail o un numero di telefono nel database.

Come posso realizzare questo?

È stato utile?

Soluzione

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
.

In breve, è necessario inserire i criteri per il pID = 1 nella clausola ON quando si unisce phone a contact.In Additon, è necessario utilizzare i join sinistro per gestire il caso in cui non hanno un telefono o un'e-mail.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top