Вопрос

У меня есть 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  |  john.s@test.com
46    |  Darth Vader        |  9999999  |  vader@deathstar.org
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;
.

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

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

Это было полезно?

Решение

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 в оговорке в разделе при присоединении к phone к contact.В Additon вам необходимо использовать левые присоединения для обработки случая, где у них нет телефона или электронной почты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top