Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于表中列的值更新或插入_Sql_Oracle - Fatal编程技术网

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,听起来您在第一次运行它之后没有唯一的行集,也就是说,表上没有唯一的约束/索引。运行一次后,要加入的列是否唯一?