2011-02-13 52 views
0

我有3个表需要与一个MySQL SELECT查询一些帮助

[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 | [email protected] 
46 | Darth Vader  | 9999999 | [email protected] 
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; 

这几乎做的,但如果接触没有任何一个电话号码或通过他们的名字的电子邮件,然后他们就会被排除在外。
我需要显示所有联系人,无论天气他们在数据库中有电子邮件还是电话号码。

我该如何做到这一点?

回答

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时。另外,您需要使用左连接来处理他们没有电话或电子邮件的情况。

+1

以秒为单位打败我。做一个代码审查,并获得橙色栏。荣誉。 – 2011-02-13 23:57:27