避免重复插入

时间:2017-04-03 21:51:02

标签: sql db2

我必须在表格中插入数据,但此表格对两列 column_1 column_2 有唯一约束。现在,在插入过程中,我收到以下错误:

  

查找错误 - DB2数据库错误:错误[23505] [IBM] [DB2 / AIX64] SQL0803N由DELETE语句引起的INSERT语句,UPDATE语句或外键更新中的一个或多个值无效,因为主数据库由" 1"标识的密钥,唯一约束或唯一索引;约束表" table_name"来自索引键的重复值。 SQLSTATE = 23505。

如何避免此错误?

3 个答案:

答案 0 :(得分:1)

您可以实现" upsert =更新或插入"语义。在DB2中,这可以通过以下方式实现(示例来自here):

MERGE INTO employees AS tab
USING (VALUES
        (123456,'smith','bob')
    ) AS merge (id,last_name,first_name)
    ON tab.id = merge.id
    WHEN MATCHED THEN
        UPDATE SET tab.id = merge.id,
                   tab.last_name = merge.last_name,
                   tab.first_name = merge.first_name
    WHEN NOT MATCHED THEN
        INSERT (id,last_name,first_name)
        VALUES (merge.id, merge.last_name, merge.first_name)

答案 1 :(得分:1)

在执行insert时只检查表中是否已存在这些列值,如果没有,则插入否则不会给出任何结果。

Insert into yourtable(required columns or u can omit if all)
Select ur columns from othertable where (column1,column2) not in 
(Select column1,column2 from yourtable)

答案 2 :(得分:0)

最后,我通过使用NOT EXISTS条款来修改solvit。