You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FULL OUTER JOIN关联双视图,获取特定ID全量单位数据?

解决方法:合并两个视图的所有Unit条目

嘿,我完全懂你的需求——就是要把特定ID对应的所有Unit记录都拉出来,不管这个Unit只在预估视图、只在实际视图,还是两边都存在,对吧?之前用FULL OUTER JOIN没成功,大概率是没处理好关联后的字段选择,或者没覆盖到所有场景。

给你一个靠谱的方案,核心思路是先把两个视图里特定ID的所有Unit都收集起来(去重),再分别和两个视图做左连接,这样就能完整拿到每个Unit对应的预估和实际数量了:

-- 替换成你要查询的特定ID值,比如@TargetID或者具体数字
WITH AllUnits AS (
    SELECT ID, Unit
    FROM vVMVoyEstTotalBLQuantitySrch
    WHERE ID = '你的特定ID'
    UNION
    SELECT ID, Unit
    FROM vVMVoyBLQuantitySrch
    WHERE ID = '你的特定ID'
)
SELECT
    au.ID,
    au.Unit,
    est.Quantity AS EstimatedQuantity,
    actual.Quantity AS ActualQuantity
FROM AllUnits au
LEFT JOIN vVMVoyEstTotalBLQuantitySrch est
    ON au.ID = est.ID AND au.Unit = est.Unit
LEFT JOIN vVMVoyBLQuantitySrch actual
    ON au.ID = actual.ID AND au.Unit = actual.Unit
ORDER BY au.Unit;

代码解释:

  • AllUnits CTE:用UNION(自动去重)把两个视图里目标ID的所有Unit合并,确保我们拿到了所有出现过的Unit,不管它在哪个视图里。
  • 两次左连接:分别关联预估视图和实际视图,这样即使某个Unit只在其中一个视图存在,另一个视图的Quantity会显示为NULL,不会漏掉任何记录。
  • 字段选择:明确区分预估数量和实际数量,结果清晰明了。

如果你之前想用FULL OUTER JOIN实现,其实也可以,只是需要用COALESCE来统一ID和Unit的取值,写法如下:

SELECT
    COALESCE(est.ID, actual.ID) AS ID,
    COALESCE(est.Unit, actual.Unit) AS Unit,
    est.Quantity AS EstimatedQuantity,
    actual.Quantity AS ActualQuantity
FROM vVMVoyEstTotalBLQuantitySrch est
FULL OUTER JOIN vVMVoyBLQuantitySrch actual
    ON est.ID = actual.ID AND est.Unit = actual.Unit
WHERE COALESCE(est.ID, actual.ID) = '你的特定ID'
ORDER BY COALESCE(est.Unit, actual.Unit);

这个写法也能达到效果,但相比第一个方案,可读性稍差一点,尤其是当过滤条件复杂的时候。

你可以根据自己的习惯选一种,两种都能满足你要的「只要Unit存在于任一视图就返回该行」的需求~

内容的提问来源于stack exchange,提问作者user124530

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:26:17