假设我有一个名为“ Company”的表,其中包含CompanyID关键字。还有另一个名为“ CompanyAddress”的相关表,该表具有CompanyID外键,因此可以轻松地建立联接。
该CompanyAddress表可以具有给定公司的多个地址,例如AddressType = 1或AddressType = 2
用于获取字段的联接等是微不足道的,但是我需要一个条件,在该条件下查询地址,如果存在则使用AddressType = 1,如果不存在,则使用AddressType = 2
目前,我正在考虑进行合并并删除重复项,但是必须有一种更好的方法
实际上,通过使用OLAP函数来执行此操作非常简单(如果您正在使用DB2 for Linux / UNIX / Windows)。我猜到了companyAddress表中的某些列名,但是“魔术”在rank()函数中:
with preferredAddresses as ( select companyID, address, addresstype, rank() over (partition by companyID order by addresstype ) as rank from companyAddress ) select * from company C, inner join preferredAddresses A on c.companyID = A.companyID where A.rank = 1;