2012-04-20 116 views
2

我目前正在使用Jooq作爲項目,但我需要一種方法來忽略插入時的重複鍵。Jooq - 忽略重複

我有一個想要寫入表的對象數組,但是如果它們已經存在由START_TS和EVENT_TYPE上的複合唯一索引確定,我希望插入以靜默方式失敗。

我的代碼看起來是這樣的:

​​

像這樣的解決方案是理想的:https://stackoverflow.com/a/4920619/416338

我想我需要添加類似:

.onDuplicateKeyUpdate().set(MY_REC.EVENT_TYPE,MY_REC.EVENT_TYPE); 

但無論我添加它似乎仍然在重複上拋出一個錯誤。

+2

我不知道這個工具,但在普通的SQL,你可以這樣做'INSERT INTO表(SELECT COL1 ,col2 FROM(VALUES(val1,val2))as temp(col1,col2)WHERE NOT EXISTS(SELECT'1'FROM table where col1 = val1))'這對於幾乎每個RDBMS都有效變異)。 – 2012-04-20 15:47:47

+0

@LukasEder INSERT INTO t(column1,... columnN)SELECT ...從其他表中...幾乎所有(如果不是全部)DBMS都支持''。 – 2012-04-20 22:29:14

+0

@ypercube:我一定錯過了'SELECT' ...我的壞 – 2012-04-20 22:31:35

回答

2

支持MySQL的INSERT IGNORE INTO語法在jOOQ 2.3.0的路線圖上。最近在jOOQ user group上討論過這個問題。此語法將在支持SQL MERGE語句的所有其他SQL方言中進行模擬。

與此同時,作爲一種解決方法,你可以嘗試一次插入一條記錄