【问题标题】:How to Insert records only where records do not exists in table to avoid duplicates Oracle [duplicate]如何仅在表中不存在记录的情况下插入记录以避免重复Oracle [重复]
【发布时间】:2022-02-07 22:28:23
【问题描述】:

您好,请参阅下面的脚本,我很想编辑脚本,以便将来自表“Book2”的某些记录插入到表“Book”中。为了避免重复,我希望它仅在表 Book 中不存在记录的情况下将记录插入 Book。 数据库是Oracle

insert into mol.bkp_Book
select * from mol.bkp_Book2
where session_id in ("3232323","23099999","567890111")

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用MERGE 声明:

    MERGE INTO mol.bkp_Book dst
    USING (
      select *
      from   mol.bkp_Book2
      where  session_id in ('3232323','23099999','567890111') -- Single quotes
    ) src
    ON (
        dst.session_id = src.session_id
    --AND dst.col1       = src.col1 -- Uncomment if you want to compare all columns
    --AND dst.col2       = src.col2
    --AND dst.col3       = src.col3
    )
    WHEN NOT MATCHED THEN
      INSERT (session_id, col1, col2, col3)
      VALUES (src.session_id, src.col1, src.col2, src.col3);
    

    【讨论】:

    • @Frances 更新。
    • 顺便说一句,您在 'where session_id in ("3232323","23099999","567890111") 中使用双引号本身就是一个错误。双引号用于创建/引用区分大小写的对象名称,这在 oracle 中是不好的做法,但 that 是一个不同的讨论。您在这里的用法最多应该是单引号 - 表示字符串值。如果列 session_id 实际上是 NUMBER 数据类型,那么您根本不应该在这些数字周围使用任何引号。
    • @EdStevens 我没有在答案中使用双引号。我什至在代码中评论它们应该是单引号。
    • @MT0 - 我很抱歉。我打算发表评论作为对 OP 的回复。不小心点击了错误的“回复”链接。还是那个“回复”链接? :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多