表1:
id name desc
-----------------------
1 a abc
2 b def
3 c adf
表2:
id name desc
-----------------------
1 x 123
2 y 345
在oracle SQL中,如何运行一个sql update查询,可以使用表2的name
和desc
(使用相同的id
)更新表1?所以我得到的最终结果是
表1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
问题取自update one table with data from another,但专门针对oracle SQL。
8条答案
按热度按时间pprl5pva1#
这称为相关更新
假设连接产生保留键的视图,您还可以
sr4lhrrt2#
试试这个:
u4dcyp6a3#
尝试
kzipqqlq4#
从来没有为我工作,因为集只需要1个值- SQL错误:ORA-01427:单行子查询返回多行。
解决方案如下:
这就是在SQLDeveloper工作表上运行它的确切方式。他们说这很慢,但这是唯一的解决办法,为我工作的情况下。
vsmadaxz5#
这里似乎是一个更好的答案,使用'in'子句,允许连接多个键:
完整的示例如下:http://forums.devshed.com/oracle-development-96/how-to-update-from-two-tables-195893.html-从Web存档,因为链接已失效。
问题在于,在where子句中,要用作键的列放在'in'前面的括号中,而select语句的列名放在括号中。where(column1,column2)in(select(column1,column2)from table where“the set I want”);
0h4hbjxa6#
Oracle Database 23c为
update
和delete
添加了直接联接:eoxn13cs7#
ttygqcqt8#
如果你的表t1和它的备份t2有很多列,这里有一个紧凑的方法。
此外,我的相关问题是,只有一些列被修改,许多行没有对这些列进行编辑,所以我想不去管它们--基本上是从整个表的备份中恢复列的子集。如果只想恢复所有行,请跳过where子句。
当然,更简单的方法是删除和插入为选择,但在我的情况下,我需要一个解决方案,只是更新。
诀窍是,当你从一对具有重复列名的表中选择 * 时,第二个表将被命名为_1。所以我的想法是