Нужна помощь с запросом MySQL SELECT

у меня 3 стола

[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

Мне нужно сделать запрос на выборку, который будет извлекать все cID каждого контакта, их имя, их номер телефона, если pID равен 1, и их электронную почту в одной таблице. Таким образом, вывод будет выглядеть, например, так.

cID   |   name             |   phone1  |  email
----------------------------------------------
45    |  John Smith         |  1234567  |  [email protected]
46    |  Darth Vader        |  9999999  |  [email protected]
47    |  Yoda               |  1236547  |  
-----------------------------------------------------------------------------

Я пытался сделать это так

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

Это почти так и есть, но если у контакта нет ни номера телефона, ни адреса электронной почты рядом с его именем, они будут исключены.
Мне нужно показать все контакты, независимо от того, есть ли у них адрес электронной почты или адрес электронной почты. номер телефона в базе.

Как я могу это сделать?


person Steinthor.palsson    schedule 13.02.2011    source источник


Ответы (1)


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

Короче говоря, вам нужно поместить критерии для pID = 1 в предложение ON при присоединении phone к contact. Кроме того, вам нужно использовать Left Joins для обработки случая, когда у них нет телефона или электронной почты.

person Thomas    schedule 13.02.2011
comment
Обгони меня на секунды. Делал код-ревью и получил оранжевую полосу. Престижность. - person Brad Christie; 14.02.2011