【问题标题】:DB2 Merge using multiple columns in ON statementDB2 Merge 在 ON 语句中使用多列
【发布时间】:2013-10-03 04:59:35
【问题描述】:

我有一个 megre 语句,它执行以下操作:

MERGE INTO TABLE_NAME1 tgt 
    USING (SELECT  CONTRACTOR, TRACTOR, COL1, COL2 FROM TABLE_NAME2) src
    ON src.CONTRACTOR = tgt.CONTRACTOR AND src.TRACTOR = tgt.TRACTOR

这是因为承包商可以拥有多台拖拉机。未使用表键,因为它只是一个标识键 - 插入时自动编号。

当表为空时,合并运行正常,但再次运行时,它会复制 tractor 为空的行。所以我尝试了:

ON ((src.CONTRACTOR = tgt.CONTRACTOR AND src.TRACTOR = tgt.TRACTOR)
 OR (src.CONTRACTOR = tgt.CONTRACTOR AND tgt.TRACTOR IS NULL))

但这会导致它挂起。 DB2 在比较 NULL 和 NULL 时是否存在问题?

【问题讨论】:

    标签: merge db2


    【解决方案1】:

    “DB2 比较 NULL 和 NULL 有问题吗?” 不,没有。但是这样比较的结果是unknown,也就是说,既不是true也不是false

    $ db2 "select * from sysibm.sysdummy1"
    
    IBMREQD
    -------
    Y      
    
      1 record(s) selected.
    
    $ db2 "select * from sysibm.sysdummy1 where null = null"
    
    IBMREQD
    -------
    
      0 record(s) selected.
    
    $ db2 "select * from sysibm.sysdummy1 where null != null"
    
    IBMREQD
    -------
    
      0 record(s) selected.
    

    没有看到您的完整陈述和示例数据,很难提供明确的答案,但您可能想尝试一下:

    ...ON ((src.CONTRACTOR = tgt.CONTRACTOR AND src.TRACTOR = tgt.TRACTOR
            AND tgt.TRACTOR IS NOT NULL))
    

    【讨论】:

    • 您说过“空拖拉机”会创建重复的行,这是您不想要的。如果不是这种情况,您可能需要重新表述您的问题,添加一些示例数据、当前结果和所需结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2013-06-11
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多