Pergunta

Eu tenho 3 mesas

[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

Preciso fazer uma consulta select que irá buscar todos os cID de cada contato, seu nome, seu número de telefone se o pID for 1 e seu e-mail, tudo em uma tabela.Portanto, a saída ficaria assim, por exemplo.

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

Eu tentei fazer assim

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

Isso quase acontece, mas se um contato não tiver um número de telefone ou um e-mail no nome, ele ficará de fora.
Preciso mostrar todos os contatos, independente de terem um e-mail ou telefone no banco de dados.

Como posso fazer isso?

Foi útil?

Solução

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

Em suma, você precisa definir os critérios para o pID = 1 na cláusula ON ao ingressar phone para contact.Além disso, você precisa usar Left Joins para lidar com o caso em que eles não possuem telefone ou e-mail.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top