更新oracle中的批量记录
Update bulk number of records in oracle
我是 sql 的新手。谁能帮我解决这个问题。
我 table 有 10000 条这样的记录
CompanyID Name
300001 A
300004 B
300005 C
300007 D
|
|
|
310000 XXX
我还有另一个公司 ID 列表,我将更新上面的 table(它只是 excel sheet 而不是 table)
OldID NewID
300001 500001
300002 500002
300003 500003
300004 500004
300005 500005
|
|
310000 510000
我的要求是,如果我在第一个 table 中找到公司 ID,我需要用新 ID 更新它,如果我在第一个 table 中找不到公司 ID,我必须使用 NewID 在 table 中创建一个新行,而不考虑 oldID。
有没有可能在一个查询中同时进行更新和插入?
您描述的是 "upsert" 或 MERGE 语句,通常是:
merge into table_a
using (<some_statement>)
on (<some_condition>)
when matched then
update
set ...
when not matched then
insert (<column_list>)
values (<column_list>);
但是,MERGE 无法更新 ON 子句中引用的值,这是执行您所要求的操作所必需的。因此,您需要两条语句:
update table_to_be_updated t
set companyid = (select newid from new_table where oldid = t.companyid )
insert into table_to_be_updated
select newid
from newtable t
where not exists ( select 1
from table_to_be_updated
where t.newid = companyid )
如果 newid
和 oldid
可能相同,那么您 运行 就会遇到问题。这也假设你的新 table 在 oldid
和 newid
上是唯一的 - 它必须是唯一的才能做你想做的事所以我不要认为这是一个不合理的假设。
我是 sql 的新手。谁能帮我解决这个问题。
我 table 有 10000 条这样的记录
CompanyID Name
300001 A
300004 B
300005 C
300007 D
|
|
|
310000 XXX
我还有另一个公司 ID 列表,我将更新上面的 table(它只是 excel sheet 而不是 table)
OldID NewID
300001 500001
300002 500002
300003 500003
300004 500004
300005 500005
|
|
310000 510000
我的要求是,如果我在第一个 table 中找到公司 ID,我需要用新 ID 更新它,如果我在第一个 table 中找不到公司 ID,我必须使用 NewID 在 table 中创建一个新行,而不考虑 oldID。
有没有可能在一个查询中同时进行更新和插入?
您描述的是 "upsert" 或 MERGE 语句,通常是:
merge into table_a
using (<some_statement>)
on (<some_condition>)
when matched then
update
set ...
when not matched then
insert (<column_list>)
values (<column_list>);
但是,MERGE 无法更新 ON 子句中引用的值,这是执行您所要求的操作所必需的。因此,您需要两条语句:
update table_to_be_updated t
set companyid = (select newid from new_table where oldid = t.companyid )
insert into table_to_be_updated
select newid
from newtable t
where not exists ( select 1
from table_to_be_updated
where t.newid = companyid )
如果 newid
和 oldid
可能相同,那么您 运行 就会遇到问题。这也假设你的新 table 在 oldid
和 newid
上是唯一的 - 它必须是唯一的才能做你想做的事所以我不要认为这是一个不合理的假设。