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

PostgreSQL中计算两张表Delta差异的实现方案咨询

实现方法

可以通过**全外连接(FULL OUTER JOIN)**结合条件筛选和字段计算来实现需求,以下是具体的SQL语句:

CREATE TABLE C AS
SELECT
    COALESCE(A.Id, B.Id) AS Id,
    CASE
        -- 当B中存在该Id且Value与A不同时,计算B.Value - A.Value
        WHEN B.Id IS NOT NULL AND A.Value != B.Value THEN B.Value - A.Value
        -- 当B中不存在该Id时,直接取A的Value
        WHEN B.Id IS NULL THEN A.Value
    END AS Value
FROM A
FULL OUTER JOIN B ON A.Id = B.Id
-- 筛选出有差异的记录:要么B不存在,要么Value不等
WHERE B.Id IS NULL OR A.Value != B.Value;

代码解释

  • FULL OUTER JOIN:关联表A和表B的Id字段,确保能捕获仅存在于A的记录(需求中无仅存在于B的记录,逻辑仍兼容此类场景)。
  • COALESCE(A.Id, B.Id):统一获取记录的Id值,避免因某表无对应记录导致Id为空。
  • CASE语句:根据记录存在场景计算目标Value:
    • 两表均存在但Value不同时,执行B.Value - A.Value的差值计算(对应需求中Id2的场景)。
    • 仅A存在该Id时,直接复用A的Value值(对应需求中Id3、Id4的场景)。
  • WHERE子句:过滤掉无差异的记录(即两表均存在且Value完全一致的Id1)。

验证示例

假设表A、B的测试数据如下:
表A:

IdValue
110
215
320
425

表B:

IdValue
110
210

执行SQL后生成的表C数据:

IdValue
2-5
320
425

完全匹配需求要求。

内容的提问来源于stack exchange,提问作者Владимир Дергачев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:15:55