Sql 基于表中列的值更新或插入
可能重复: 在以下情况下,你们能给我一个建议吗Sql 基于表中列的值更新或插入,sql,oracle,Sql,Oracle,可能重复: 在以下情况下,你们能给我一个建议吗 Read table 2 column 1 if value says the record exists in table 1 update table 1 record with table 2 record details else(value says the record does not exist in table 1) insert table 1 record with table 2 record details 我是Or
Read table 2 column 1
if value says the record exists in table 1
update table 1 record with table 2 record details
else(value says the record does not exist in table 1)
insert table 1 record with table 2 record details
我是Oracle SQL的初学者,请告诉我是否有更好的方法..我正在考虑使用游标来解决这个问题..看看merge语句
看看merge语句
最简单的答案是使用以下语句:
MERGE INTO table1 a
USING ( select column1, column2
from table2 ) b
ON ( a.column1 = b.column1 )
WHEN MATCHED THEN
update set a.column2 = b.column2
WHEN NOT MATCHED THEN
insert (a.column1, a.column2)
values (b.column1, b.column2)
简单地说,这将从表2中的select中获取所有内容。然后,它根据条件将此查询连接到表1。如果存在匹配项,则更新,否则插入
最简单的答案是使用以下语句:
MERGE INTO table1 a
USING ( select column1, column2
from table2 ) b
ON ( a.column1 = b.column1 )
WHEN MATCHED THEN
update set a.column2 = b.column2
WHEN NOT MATCHED THEN
insert (a.column1, a.column2)
values (b.column1, b.column2)
简单地说,这将从表2中的select中获取所有内容。然后,它根据条件将此查询连接到表1。如果存在匹配项,则更新,否则插入
本手册介绍了您目前不需要的各种附加选项。您能再解释一下吗?你为什么不能对照表1检查一下?你能再解释一下吗?为什么你不能对照表1检查呢?谢谢Ben,它几乎达到了目的。第一次它成功运行,但如果我再次运行,它会抛出错误,无法在源表中获得一组稳定的行。对此有任何解决方法。尝试使用Distinct,如其他线程中所述,但它不起作用。请注意-oracle9中有许多与此功能相关的错误。在升级到oracle10之前,我们甚至被禁止使用它。@javanoob,听起来您在第一次运行它之后没有唯一的行集,也就是说,表上没有唯一的约束/索引。在你运行一次之后,你加入的专栏是独一无二的吗?谢谢Ben,它几乎达到了目的。第一次它成功运行,但如果我再次运行,它会抛出错误,无法在源表中获得一组稳定的行。对此有任何解决方法。尝试使用Distinct,如其他线程中所述,但它不起作用。请注意-oracle9中有许多与此功能相关的错误。在升级到oracle10之前,我们甚至被禁止使用它。@javanoob,听起来您在第一次运行它之后没有唯一的行集,也就是说,表上没有唯一的约束/索引。运行一次后,要加入的列是否唯一?