【问题标题】:SQL - Insert if not exists else updatedSQL - 如果不存在则插入,否则更新
【发布时间】:2014-04-02 11:18:06
【问题描述】:

我有一个包含新内容的 TempTable,现在我想用它来插入/更新 MainTable。 我需要一个快速的方法,但是桌子真的很大。

临时表:

  • 时间 |客户|价值
  • 时间戳字符串浮点数

如果不存在则插入 (TIME|CUSTOMER|VALUE),否则更新 VALUE

主表:

  • 时间 |客户|价值
  • 时间戳字符串浮点数

我找到了一些 SQL 查询,但速度很慢。

有谁知道我如何用 pl/sql 做到这一点?

【问题讨论】:

  • 查看MERGE声明

标签: sql oracle merge sql-insert


【解决方案1】:

MERGE 语句是你需要的:

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606

SQL> select * from t;

  ID N                                                                          
---- -                                                                          
   1 a                                                                          

SQL> select * from t1;

  ID NA                                                                         
---- --                                                                         
   1 a1                                                                         
   2 b1                                                                         

SQL> merge into t using t1 on (t.id = t1.id)
  2  when matched then
  3  update set t.name = t1.name
  4  when not matched then
  5  insert (t.id, t.name) values(t1.id, t1.name)
  6  /

2 rows merged.

SQL> select * from t;

  ID NA                                                                         
---- --                                                                         
   1 a1                                                                         
   2 b1     

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多