Нужна помощь с помощью запроса Selection MySQL
-
13-11-2019 - |
Вопрос
У меня есть 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 вам необходимо использовать левые присоединения для обработки случая, где у них нет телефона или электронной почты.