首页 > 解决方案 > 使用全外连接

问题描述

我有两个视图,其中包含 ID、单位和数量。一种视图用于实际值,另一种视图用于估计值。我想要一个 select 语句,它将返回两个视图中的所有行,对于特定的 ID,无论单元是否在两个视图中。我似乎无法让它与 FULL OUTER JOIN 一起使用,因为我需要加入 ID 和 Unit。

在此处输入图像描述

在此示例中,vVMVoyEstTotalBLQuantitySrch 包含 CBM 条目,该条目不在 vVMVoyBLQuantitySrch 中。我仍然想要所有的行,例如:

在此处输入图像描述

也可能是相反的方式,例如 vVMVoyEstTotalBLQuantitySrch 不包含特定单位,但 vVMVoyBLQuantitySrch 包含,并且我再次想要所有行。如果它在至少一个视图中,则返回它。

我已经尝试了一些来自互联网的代码片段,在 ID 和 Unit 上都使用了 COALESCE,但是我只得到了丢失的条目(CBM),而不是全部。

请帮忙!

标签: sqlsql-serverfull-outer-join

解决方案


试试下面的查询

SELECT ISNULL(q1.Id,q2.Id) As Id, 
ISNULL(q1.estLoadUnit,q2.ActLoadUnit) As Units,
q1.EstTotalLoaded,
 q2.ActTotalLoadded
FROM vVMVoyEstTotalBLQuantitySrch  q1
FULL OUTER JOIN vVMVoyBLQuantitySrch q2 ON q1.Id = q2.Id
                     AND q2.actLoadUnit = q1.EstLoadUnit

推荐阅读