我有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 在对条款时加入 phonecontact.此外,你需要使用左加以处理的情况下,他们没有电话或电子邮件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top