Precisa de ajuda com uma consulta MySQL SELECT
-
13-11-2019 - |
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?
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