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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top