Ski*_*eak 0 join sql-server query
我处于需要查询数据库中的数据的情况,但正在努力解决如何正确形成查询的问题。基本上我需要从下表中获取数据:
Table: Contact
contact_id INT [Primary Key]
first_name VARCHAR(50)
last_name VARCHAR(50)
Table: Contact_Phone
contact_id INT [Foreign Key/Composite Primary Key]
phone_number VARCHAR(15) [Composite Primary Key]
extension VARCHAR(10), NULL
Table: Contact_Fax
contact_id INT [Foreign Key/Composite Primary Key]
fax_number VARCHAR(15) [Composite Primary Key]
Table: Contact_Email
contact_id INT [Foreign Key/Composite Primary Key]
email VARCHAR(100) [Composite Primary Key]
Run Code Online (Sandbox Code Playgroud)
现在并不是我Contacts桌子上的每个联系人都有电话、传真或电子邮件。有些人只有一部电话或传真。其他人只是一封电子邮件。我知道有一个联系人只有一个电话号码。
现在我的问题是,如果我尝试对所有这些表进行简单的查询以查找特定的联系信息,如果其中任何一个都没有条目(例如,我的一个没有传真或电子邮件的联系人) 然后我根本没有返回任何数据。
所以问题是,我如何将这个查询放在一起,以便如果我试图查找特定联系人的信息,即使其中一个发生,我仍然能够看到所有数据(电话/传真/电子邮件)是空白?
使用外连接:
SELECT c.first_name, c.last_name, p.phone_number, p.extension, f.fax_number, e.email
FROM Contact c
LEFT OUTER JOIN Contact_Phone p ON c.ContactID = p.ContactID
LEFT OUTER JOIN Contact_Fax f ON c.ContactID = f.ContactID
LEFT OUTER JOIN Contact_Email e ON c.ContactID = e.ContactID
Run Code Online (Sandbox Code Playgroud)
任何缺失的信息都将显示为NULL。
这假设所有联系人至少在Contact.