我有一个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进行比较的问题?
答案 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))