查询问题:是否有更好的方法从一个表中选择所有记录,以及从另一个表中选择不匹配的记录?

时间:2011-08-28 07:00:26

标签: sql select join

请考虑以下事项:

**Customers**
CustomerId (PK)
LastName
FirstName
Address1
City
State
Zip

**CustomerMailingAddresses**
CustomerId (PK)/(FK)
Address1
City
State
Zip

基本上,两个表之间存在一对一的关系。但是,并非客户中的每个客户记录都在CustomerMailingAddresses表中都有一个条目。我正在尝试使用T-SQL(Sql Server 2008)生成客户名称和地址列表。但是,我只想从CustomerMailingAddresses返回地址,以及客户中没有CustomerMailingAddresses中每个CustomerId的相应条目的所有地址。换句话说,CustomerMailingAddresses中的条目(如果有的话)将作为客户地址的覆盖。

我碰壁了,因为我尝试过的查询都不起作用。我愿意接受任何建议。

2 个答案:

答案 0 :(得分:3)

一种选择是使用COALESCE

select
    c.CustomerId,
    COALESCE(m.Address1, c.Address1) as Address1,
    COALESCE(m.City, c.City) as City,
    COALESCE(m.State, c.State) as State,
    COALESCE(m.Zip, c.Zip) as Zip
from Customers c
left join CustomerMailingAddresses m on m.CustomerId = c.CustomerId

答案 1 :(得分:0)

怎么样

SELECT * FROM Customers
MINUS
SELECT Customers.*
       FROM Customers, CustomerMailingAddresses
       WHERE Customers.CustomerId = CustomerMailingAddresses.CustomerId

(抱歉,如果我的SQL有点生疏)

相关问题