0

我有 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;

这几乎可以做到,但如果联系人没有电话号码或姓名的电子邮件,那么他们将被排除在外。
无论天气如何,我都需要显示所有联系人,他们在数据库中有电子邮件或电话号码。

我怎样才能做到这一点?

4

1 回答 1

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在加入时将 的条件放在 ON 子句phonecontact。此外,您需要使用 Left Joins 来处理他们没有电话或电子邮件的情况。

于 2011-02-13T23:56:34.337 回答