Besoin d'aide avec une requête MySQL Select
-
13-11-2019 - |
Question
J'ai 3 tables
[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
J'ai besoin de faire une requête sélectionnée qui rapportera tout le CID de chaque contact, leur nom, leur numéro de téléphone si le PID est 1 et leur e-mail dans une seule table. Ainsi, la sortie ressemblerait à ceci par exemple.
cID | name | phone1 | email
----------------------------------------------
45 | John Smith | 1234567 | john.s@test.com
46 | Darth Vader | 9999999 | vader@deathstar.org
47 | Yoda | 1236547 |
-----------------------------------------------------------------------------
J'ai essayé de le faire comme ça
SELECT contact.cID, name, phone, email FROM contact, phone, email
WHERE contact.cID = phone.cID AND contact.cID = email.cID AND phone.pID = 1;
Cela le fait presque, mais si un contact n'a ni un numéro de téléphone ni un e-mail par leur nom, il sera laissé de côté.
J'ai besoin de montrer tous les contacts, quelle que soit la météo, ils ont un e-mail ou un numéro de téléphone dans la base de données.
Comment puis-je accomplir cela?
La solution
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
Bref, vous devez mettre les critères pour le pID = 1
dans la clause ON lors de la joie phone
à contact
. Dans Additon, vous devez utiliser les jointures de gauche pour gérer le cas où ils n'ont pas de téléphone ou de courriel.