请考虑以下事项:
**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中的条目(如果有的话)将作为客户地址的覆盖。
我碰壁了,因为我尝试过的查询都不起作用。我愿意接受任何建议。
答案 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有点生疏)