SQL - 如果不存在则插入其他更新

时间:2014-04-02 11:18:07

标签: sql oracle merge sql-insert

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

不是Temptable:

  • TIME | CUSTOMER | VALUE
  • TimeStamp String Float

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

MainTable:

  • TIME | CUSTOMER | VALUE
  • TimeStamp String Float

我找到了一些SQL查询,但这些都很慢。

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

1 个答案:

答案 0 :(得分: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