Merge 在ON语句中使用多列进行DB2合并

Merge 在ON语句中使用多列进行DB2合并,merge,db2,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 这是因为承包商可以有多台拖拉机。不使用表键,因为它只是标识键-插入时自动编号 当表为空时,合并运行正常,但再次运行时,

我有一个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
这是因为承包商可以有多台拖拉机。不使用表键,因为它只是标识键-插入时自动编号

当表为空时,合并运行正常,但再次运行时,它会复制拖拉机为空的行。所以我试着:

ON ((src.CONTRACTOR = tgt.CONTRACTOR AND src.TRACTOR = tgt.TRACTOR)
 OR (src.CONTRACTOR = tgt.CONTRACTOR AND tgt.TRACTOR IS NULL))
但这导致它挂起。DB2在比较NULL和NULL时是否存在问题?

“DB2在比较NULL和NULL时是否存在问题?”不,它没有。然而,这种比较的结果是未知的,换句话说,它既不是
真的
也不是
假的

$ 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))
您说过“空拖头”会创建重复的行,这是您不想要的。如果不是这样,您可能需要重新表述您的问题,添加一些示例数据、当前结果和所需结果。