oracle多表关联多字段update

多表关联多字段update

有代码有J8:

update spatial_references
set(
auth_name, 
auth_srid, 
falsex, 
falsey, 
xyunits, 
falsez, 
zunits, 
falsem, 
munits, 
xycluster_tol, 
zcluster_tol, 
mcluster_tol, 
object_flags, 
srtext
)=(select  
auth_name, 
auth_srid, 
falsex, 
falsey, 
xyunits, 
falsez, 
zunits, 
falsem, 
munits, 
xycluster_tol, 
zcluster_tol, 
mcluster_tol, 
object_flags, 
srtext
from spatial_references where srid=0)
where srid=2;

===============================================
2016.07.09
以上这条语句不够实用。今天有同事问到,结果露怯,于是发粪涂墙,狂搜资料,又写了一条实用一点的:

update qq q set 证书GUID=(select zs.guid from 证书表 zs where zs.code=q.证书编号 and rownum=1)

更完整一点的:

update qq q set 证书GUID=(select zs.guid from 证书表 zs where zs.code=q.证书编号 and rownum=1)
where exists(select 1 from 证书表 zs where zs.code=q.证书编号 and zs.guid<>q.证书GUID)
update nodeconfiginfo n set (qh_name,qh_parentid,qh_orderid)=(select qh_name,qh_parentid,qh_orderid
from SeaBoardConfig s where s.qh_id=n.qh_id)
where exists(select 1 from SeaBoardConfig s where s.qh_id=n.qh_id);

这条语句,SET里有个循环;然后外层也有个循环。这两个循环没有什么直接关系。我不知道这条SQL语句是如何执行的,猜想应该是嵌套循环:

foreach()
{//外层循环
	foreach()
	{//set循环
	}
}

如果没有外层循环的话,那么会全表执行。

Oracle中,可以使用多表关联来进行更新操作。多表关联update可以通过使用子查询或者使用Oracle提供的MERGE语句来实现。 使用子查询进行多表关联update的方式如下: 首先,我们需要编写一个SELECT语句,该语句将返回需要更新的记录。 例如,我们有两个,分别是table1和table2。我们希望将table2中的某些记录的某个字段的值更新到table1中的相应记录中。我们可以写一个SELECT语句如下: ``` SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id ``` 该SELECT语句将返回需要更新的数据。 接下来,我们需要将该SELECT语句作为子查询,与UPDATE语句结合使用,来进行更新操作。 例如,我们可以编写一个UPDATE语句如下: ``` UPDATE table1 t1 SET t1.column1 = ( SELECT t2.column2 FROM table2 t2 WHERE t1.id = t2.id ) ``` 该UPDATE语句将根据子查询的结果,将table2中的某个字段的值更新到table1中的相应记录中。 此外,还可以使用Oracle提供的MERGE语句来进行多表关联更新操作。MERGE语句可以根据指定的条件,在目标中执行插入、更新和删除操作。 例如,我们可以编写一个MERGE语句如下: ``` MERGE INTO table1 t1 USING table2 t2 ON (t1.id = t2.id) WHEN MATCHED THEN UPDATE SET t1.column1 = t2.column2; ``` 该MERGE语句将根据指定的条件,将table2中的某个字段的值更新到table1中的相应记录中。 总之,Oracle支持多表关联update操作,可以通过子查询或者使用MERGE语句来实现。使用子查询时需要将SELECT语句作为子查询与UPDATE语句结合使用;使用MERGE语句时需要指定条件,并执行相应的更新操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值