使用FULL OUTER JOIN

时间:2018-05-18 10:42:24

标签: sql sql-server full-outer-join

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

enter image description here

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

enter image description here

它也可能是另一种方式,例如vVMVoyEstTotalBLQuantitySrch不包含特定单元,但vVMVoyBLQuantitySrch会这样做,而且我想要所有行。如果它至少在其中一个视图中,则返回它。

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

请帮忙!

2 个答案:

答案 0 :(得分:0)

你的尝试看起来像这样吗?

select . . .
from view1 v1 full outer join
     view2 v2
     on v1.id = v2.id
where 15506 in (v1.id, v2.id);

诀窍是你必须检查两个ID,因为full outer join可能会产生NULL个值。

答案 1 :(得分:0)

尝试以下查询

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