【问题标题】:Avoid duplicates in insert避免插入重复
【发布时间】:2017-04-03 21:51:02
【问题描述】:

我必须向表中插入数据,但该表对 column_1column_2 两列有唯一约束。现在在插入过程中出现以下错误:

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

如何避免这个错误?

【问题讨论】:

标签: sql db2


【解决方案1】:

您可以实现“upsert = update or insert”语义。在 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)

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

    • 我已经使用 not exists 命令完成了这项工作,但感谢它也很有帮助。
    【解决方案3】:

    最后我设法通过使用 NOT EXISTS 子句来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多