oracle 多表更新update,返回多行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 多表更新update,返回多行相关的知识,希望对你有一定的参考价值。

update table1 a set a.cb_name = (select tg_name from table2 b where a.id=b.id) where a.id in (select b.id from table2 b where a.id=b.id);

这种情况,就是多表更新,方法有几个,最简单就是 Update Select 啦!

UPDATE (SELECT /*+ BYPASS_UJVC */
         A.ID, A.CB_NAME, B.TG_NAME
          FROM TABLE1 A, TABLE2 B
         WHERE A.ID = B.ID)
   SET CB_NAME = TG_NAME

参考技术A 如果没有设置主键的情况下确实是可以返回多行的。 我没有看明白你是什么意思,是只更新一行,还是什么?
如果想只更新一行的话, 可以在查询条件上面加 rownum <2 ,只返回一条。
update table1 a set a.cb_name = (select tg_name from table2 b where a.id=b.id and rownum <2 ) where a.id in (select b.id from table2 b where a.id=b.id and rownum <2);追问

后面重新附了一个表格 你看看就知道了

追答

没看到有表格啊?

追问

能说下你QQ么

本回答被提问者采纳
参考技术B select tg_name from table2 b where a.id=b.id这个子查询 返回了两条结果。

你让a.cb_name 等于两个结果当然行不通了!

实在不行你把select tg_name from table2 b where a.id=b.id改成select distinct tg_name from table2 b where a.id=b.id
distinct是去重复的 (只在这个场景适合,如果去掉重复还是多行,那就不行了)
参考技术C (select tg_name from table2 b where a.id=b.id) 返回了多个值,可以在tg_name前面加上distinct,希望可以帮到你!

[oracle]两表关联的update操作问题

现在有两个表 a 和 b,要用b表的x字段来更新a表的x字段,条件是a表的y字段=3,并且a表z字段=b表的z字段,两表数据很多,而且(a表z字段=b表的z字段)的个数不是唯一的.

高手请来帮一下忙啊,写出这段sql语句,谢谢了

(a.z = b.z)的个数不唯一,那你要取哪个?
给你个取最大的:
update a set a.x =
(select max(b.x) from b where a.z = b.z )
where y=3
;
两表数据多,只能通过在两表z字段建索引来加快速度。
参考技术A update a, b set a.x = b.x where a.y=3 and a.z = b.z

以上是关于oracle 多表更新update,返回多行的主要内容,如果未能解决你的问题,请参考以下文章

关于Oracle update set 语句的语法

oracle update如何更新多行数据

更新语句中的“单行子查询返回多行”

ORA-01427: 单行子查询返回多行更新

update 两个表关联 更新

oracle多表关联update