一个联盟而不存在测试似乎是这样的方式去
select *
from company C
inner join CompanyAddress A on A.companyID = C.companyID
where A.AddressType = 1
union all
select *
from company C
LEFT join CompanyAddress A on A.companyID = C.companyID
and A.AddressType = 2
and not exists (
select *
from CompanyAddress B
where B.companyID = C.companyID
and B.AddressType = 1)
第二部分使用左连接,以便既没有地址类型1也没有2的公司仍将显示。
要么是这样,要么使用左连接来AddressType = 2,只有当第一个连接(type = 1)失败时才会触发。
select C.*,
coalesce(A.addressType, B.addressType) addressType,
coalesce(A.streetname, B.streetname) streetname
from company C
left join CompanyAddress A on A.companyID = C.companyID and A.AddressType = 1
left join CompanyAddress B on A.companyID is null
AND B.companyID = C.companyID and B.AddressType = 2
正如你所看到的,这是很难,因为从地址每一列都必须经过3210 A和B之间
+1这将与DB2 for IBM i V5R4 – 2011-02-03 16:19:33