2013-09-30 33 views
0

我有一個megre聲明,做類似以下內容:DB2併入其聲明

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進行比較的問題?

回答

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)) 
+0

謝謝,但它可能有一個空拖拉機。 – Brian

+0

你說過「空拖拉機」會創建重複的行,這是你不想要的。如果不是這種情況,您可能需要更改您的問題,添加一些樣本數據,當前結果以及所需結果。 – mustaccio