Oracle用一个表的一个字段值去更新另一张表的某个字段值

我是这么写的:

 UPDATE TABLE1 T1 SET T1.COL11=
 SUBSTR(
(SELECT TO_CHAR(T2.ENDTIME,'YYYYMMDD') FROM TABLE2 T2 WHERE T1.MAPCODE = T2.PROJECTID AND T2.MAPSHEETFLAG IS NULL),0,6)
 WHERE EXISTS 
(SELECT TO_CHAR(T2.ENDTIME,'YYYYMMDD') FROM TABLE2 T2 WHERE T1.MAPCODE = T2.PROJECTID AND T2.MAPSHEETFLAG IS NULL);


这里,表TABLE1即T1是图幅元数据表,表TABLE2即T2是范围线工程表。现在需要将T2的EndTime(包括年月日时分秒在内的完整的时间类型)格式化为YYYYMMDD形式,并取前6位,即年月(如201705),赋值给T1的COL1字段。赋值的条件是T1的MAPCODE与T2的PROJECTID相等,且T2的MAPSHEETFLAG标记值不为空,且查询结果存在。

Oracle数据库中,将一个字段更新一个字段是常见的操作。根据提供的引用内容,以下是一些有效的实现方式: ### 使用子查询更新多个字段 当需要更新多个字段时,可以使用如下语法: ```sql UPDATE a SET (a.province, a.city) = ( SELECT b.province, b.city FROM b WHERE b.mobile = a.mobile ) WHERE EXISTS ( SELECT 1 FROM b WHERE b.mobile = a.mobile ); ``` 这种方法通过单条SQL语句同时更新`province`和`city`两个字段,相比逐个字段更新效率更高[^1]。 ### 使用内联视图更新字段 如果只需要更新单个字段,可以采用内联视图的方式: ```sql UPDATE ( SELECT a.company_name AS company_name1, cc.company_name_jc AS company_name2 FROM your_table iy JOIN another_table cc ON iy.some_id = cc.some_id ) SET company_name1 = company_name2; ``` 这种方式适用于两个之间存在关联关系的情况,并且可以直接通过JOIN来构建一个临时的结果集进行更新[^2]。 ### 统计信息并更新 对于某些特定需求,比如统计某张中不同状态的数量,并将这些统计数据用于更新其他中的记录,可以通过先做统计再执行更新的方式来完: ```sql -- 假设有一个汇总temp_summary来存储统计结果 INSERT INTO temp_summary (total_orders, pending_orders, completed_orders, uncompleted_orders) SELECT COUNT(B.ID) AS total_orders, COUNT(CASE WHEN B.status IN ('1') THEN 'un_deal' END) AS pending_orders, COUNT(CASE WHEN B.status IN ('2') THEN 'had_complete' END) AS completed_orders, COUNT(CASE WHEN B.status = '3' THEN 'un_complete' END) AS uncompleted_orders FROM WAIT_ORDER B; -- 然后用这个汇总更新目标 UPDATE target_table t SET t.total_orders = (SELECT total_orders FROM temp_summary), t.pending_orders = (SELECT pending_orders FROM temp_summary), ... WHERE ...; -- 根据实际情况添加WHERE条件 ``` 此方法首先对源进行了详细的统计分析,然后利用这些统计更新目标中的相应字段[^3]。 以上方法均基于标准的Oracle SQL语法编写,确保了跨版本兼容性的同时也保持了较高的执行效率。选择哪种方式取决于具体的应用场景以及数据量大小等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值