我有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;
这几乎可以做到,但如果联系人没有电话号码或电子邮件名称,那么他们将被排除在外。
我需要显示所有联系人,无论天气如何,他们都有数据库中的电子邮件或电话号码。
我该如何做到这一点?
答案 0 :(得分:3)
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
的条件放在ON子句中。另外,您需要使用Left Joins来处理他们没有电话或电子邮件的情况。