DB2 Merge在ON语句中使用多个列

时间:2013-09-30 18:19:07

标签: merge db2

我有一个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

这是因为承包商可以拥有多台拖拉机。不使用表密钥,因为它只是一个身份密钥 - 插入时的自动编号。

当表为空时,Merge运行正常,但是当再次运行时,它会复制拖拉机为空的行。所以我试过了:

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

但这导致它挂起。 DB2是否存在将NULL与NULL进行比较的问题?

1 个答案:

答案 0 :(得分: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))