0

我有一个 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 时是否存在问题?

4

1 回答 1

1

“DB2 在比较 NULL 和 NULL 时有问题吗?” 不,不是的。然而,这种比较的结果是未知的,换句话说,既不是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))
于 2013-10-01T00:01:19.617 回答