需要一些MySQL SELECT查询的帮助

时间:2011-02-13 23:53:28

标签: sql mysql select-query

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

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

我该如何做到这一点?

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来处理他们没有电话或电子邮件的情况。