2015-04-04 114 views
0

我有两个表“Inventory”和“Tendor”,其中库存时Inventory.ti_name = Tendor.ki_name使用下面的查询有主键pk_id,我更新“Inventory”表如何从一个表中插入数据到另一个表在Oracle

Update Inventory A set (Used_NAME, ACCOUNT_NUMBER, ti_STATUS) 
= (Select B.Using_NAME, B.ACCOUNT_NO, B.ki_STATUS from 
Tendor B where A.ti_name = B.ki_name and a.pk_id is not null); 

这个查询或任何优化的任何错误?

更新用那些谁是不满足条件Inventory.ti_name = Tendor.ki_name,我想将它插入与主键pk_idInventory”表中的新行后,应该改变 如何做到这一点?为pk_id做我需要做的像一些逻辑“SEQ.NEXTVAL FROM DUAL' 任何人可以提出一个查询

回答

1

此查询更新的搜索匹配表inventorytendor行。当两个表都包含具有相同值ki_name的行时,它将更新表inventory中的行。所有的tendor行,这是不是在inventory发现,将被插入有:

merge into Inventory a 
using Tendor b 
    on (A.ti_name = B.ki_name) 
when matched then update 
    set a.Used_NAME = B.Using_NAME, 
     a.ACCOUNT_NUMBER = B.ACCOUNT_NO, 
     a.ti_STATUS = B.ki_STATUS 
when not matched then 
insert (pk_id, Used_NAME, ACCOUNT_NUMBER, ti_STATUS) 
values (your_seq.nextval, B.Using_NAME, B.ACCOUNT_NO, B.ki_STATUS) 

您也可以在insert语句中使用序列。

+0

让我检查一下,如果它有效,它会很棒。我正在使用oracle – peter 2015-04-04 20:40:39

+0

@Dimitry'当匹配然后更新'和'当不匹配然后'是一个oracle查询? – peter 2015-04-04 20:48:21

+0

是的。它是SQL标准的一部分,它在oracle中实现。更多信息在文档中:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm – Dmitry 2015-04-04 20:53:12

相关问题