Merge 在ON语句中使用多列进行DB2合并
我有一个megre声明,它的作用如下: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 这是因为承包商可以有多台拖拉机。不使用表键,因为它只是标识键-插入时自动编号 当表为空时,合并运行正常,但再次运行时,
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))
您说过“空拖头”会创建重复的行,这是您不想要的。如果不是这样,您可能需要重新表述您的问题,添加一些示例数据、当前结果和所需结果。