将 tbmdf05 的f80字段更新为 tbmdf03 和tbmdf03f的3个字段之和:

Update tbmdf05 Set tbmdf05.f80=
(
Select b.f1210+c.f1710+c.f1810
from tbmdf03 b,tbmdf03f c
where tbmdf05.sProjID=b.sProjID and tbmdf05.iDegree=b.iDegree
and tbmdf05.sProjID=c.sProjID and tbmdf05.iDegree=c.iDegree);

=============================

果然有效,看我的例子:

SQL> select * from t1;

S1 S2
---------- ----------
1 A
2 B
3 C

SQL> select * from t2;

S1 S2
---------- ----------
3 X
2 Y
1 Z

SQL> update t1 set s2=(select s2 from t2 where t1.s1=t2.s1);

已更新3行。

SQL> select * from t1;

S1 S2
---------- ----------
1 Z
2 Y
3 X


路虽远,行则必达;
事虽难,有为乃成!

-------------------------------------------

Update tProjInfo Set tProjInfo.sProjID=(Select substr(tProjInfo.sProjID,1,3) || '000' || substr(c.sMemo1,7,1) || substr (tProjInfo.sProjID,8,6) || substr(c.sMemo1,8,3) || substr (tProjInfo.sProjID,17,3) as sProjIDTemp  From (Select sProjID,iDegree,sDirectionCode,sMemo1 From tProjInfo Where length(sMemo1)=12 and substr(sMemo1,11,2)='00') VF0 Where tProjInfo.iDegree=VF0.iDegree AND substr (tProjInfo.sDirectionCode,1,length(VF0.sDirectionCode))=VF0.sDirectionCode) ;

报如下错误:
*
ERROR 位于第 1 行:
ORA-01407: 无法更新 ("YSZC115"."TPROJINFO"."SPROJID") 为 NULL

修改:
通过给tProjInfo也加相同的条件 length(tProjInfo.sMemo1)=12 and substr(tProjInfo.sMemo1,11,2)='00' ,使两个表tProjInfo,VF0有相同的记录数,才可更新,如下:

Update tProjInfo Set tProjInfo.sProjID=(Select substr(tProjInfo.sProjID,1,3) || '000' || substr(c.sMemo1,7,1) || substr (tProjInfo.sProjID,8,6) || substr(c.sMemo1,8,3) || substr (tProjInfo.sProjID,17,3) as sProjIDTemp  From (Select sProjID,iDegree,sDirectionCode,sMemo1 From tProjInfo Where length(sMemo1)=12 and substr(sMemo1,11,2)='00') VF0 Where tProjInfo.iDegree=VF0.iDegree AND substr (tProjInfo.sDirectionCode,1,length(VF0.sDirectionCode))=VF0.sDirectionCode) Where length(tProjInfo.sMemo1)=12 and substr(tProjInfo.sMemo1,11,2)='00';

------------------------------

你自己不是已经写了么?
使两个表tProjInfo,VF0有相同的记录数,才可更新
其实应该保证外面的记录数不多于里面查询的记录数

Update Set F1=({0}) where {1}
在你上面开始的那句Sql里,{0}处返回记录数可能少于{1}查询的记录数,因为{0}处对tProjInfo有限制length(sMemo1)=12 and substr(sMemo1,11,2)='00')
这样外面SQL里可能存在一条以上记录,它并不满足条件length(sMemo1)=12 and substr(sMemo1,11,2)='00')
但是依然在外面SQL返回的游标里
该记录在里面的SQL 联合查询时为NULL
更新变成了: Update tProjInfo Set sProjID=NULL WHERE rowid=...
而sProjID是NotNull的所以报错

------------------------------------------------------------------

update tbmda03F3 t3,tbmda03F1 t1 set t3.F0401=t3.F0101/t1.f0101, t3.F0402=t3.F0102/t1.f0102, t3.F0406=t3.F0106/t1.f0106, t3.F0407=t3.F0107/t1.f0107,
t3.F0408=t3.F0108/t1.f0108, t3.F0409=t3.F0109/t1.f0109, t3.F0410=t3.F0110/t1.f0110, t3.F0411=t3.F0111/t1.f0111, t3.F0412=t3.F0112/t1.f0112, t3.F0413=t3.F0113/t1.f0113, t3.F0414=t3.F0114/t1.f0114, t3.F0415=t3.F0115/t1.f0115, t3.F0416=t3.F0116/t1.f0116 where t1.sprojid=t3.sprojid and t1.idegree=t3.idegree

update tprojinfor t1 set sprojid=(select sprojid from tprojinfor t2 where t2.smemo1='3' and substr(t2.smostid,1,4)='2006' and t1.smostid=t2.smostid) where t1.smemo1='2' and substr(t1.smostid,1,4)='2006' and smostid in (select smostid from tprojinfor t3 where t3.smemo1='3' and substr(t3.smostid,1,4)='2006');

SQL语句:查询多表更新数据相关推荐

  1. 使用SQL语句DELETE删除表中数据

    使用SQL语句DELETE删除表中数据 基本语法格式如下: FROM:可选关键字,用在DELETE关键字与目标table_or_view_name. <OUTPUT_Clause>:将已删 ...

  2. sql语句查询指定年月的数据

    sql语句查询指定年月的数据,思路是将数据库中的日期转换成 'yyyy-MM' 格式的字符串,然后与参数对比,示例如下: 参数传年月字符串,如:"2020-07", sql语句: ...

  3. 关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引号就可以 ...

  4. sql语句查询出重复的数据

    sql语句查询出一张表中的重复数据 问题描述: 未去重的数据,比去重之后的多了一条,现想获取该重复的数据 SELECT SheetID FROM anquan.finance GROUP BY She ...

  5. 关于oracle sql语句查询时表名和字段名要加双引号的问题详解

    转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...

  6. SQL语句查询倒数1-4条数据

    查询倒数1-4条数据 今天弄了半个小时才做出自己需要的效果 (当然也可以查询非倒数的1–4条数据) SQL语句: 1.不需要写字段,直接根据表来查询倒数数据 select * from commodi ...

  7. sql语句查询当天当月的数据

    源代码地址 搬运:https://www.cnblogs.com/javasuperman/p/8955711.html 今天 select * from 表名 where to_days(时间字段名 ...

  8. Mysql 使用sql语句快速复制表和数据

    复制表结构 使用like create table new_tableName like old_tableName ; 使用子查询 CREATE TABLE new_tableName SELECT ...

  9. SQL语句查询所有表和查询表里的所有字段

    查询数据库里的所有表 1. 查询数据库里面的所有表 MySQL select table_name tableName, engine, table_comment tableComment, cre ...

  10. 用一个Sql语句查询出表中的一个字段的数据类型

    select name,(select name from systypes where xusertype=syscolumns.xusertype) from syscolumns where i ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续25)
  2. Educational Codeforces Round 90 (Rated for Div. 2)部分题解
  3. C语言循环队列的实现方法,C语言循环队列(数组实现)
  4. BZOJ(8) 1053: [HAOI2007]反素数ant
  5. oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
  6. win7怎么解压rar文件_win7解压rar文件的方法
  7. 信息学奥赛一本通(1156:求π的值)
  8. kibana使用详解
  9. 2021职场白领健康图鉴.pdf(附下载链接)
  10. 远在美国的凤姐为何选择回国理財?
  11. 项目日报模板_韶州中学项目建设正酣 ,计划明年9月投入使用
  12. java运行环境安装步骤_安装JAVA运行环境步骤
  13. SpringBoot 导出Excel 固定表头
  14. PDF怎么快速统计文档字数?这两种方法很简单
  15. VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
  16. day01学习过程笔记
  17. web服务器硬件软件配置选择
  18. uni-app 对接第三方h5
  19. 【相机】工业相机必看的六大参数
  20. 怎么修改PDF文字,PDF修改文字用什么方法

热门文章

  1. 【路径规划】基于matlab精英粒子群算法双机器人路径规划【含Matlab源码 621期】
  2. 【三维装箱】基于matlab遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】
  3. 安全模式 提权_WEB安全第八章实战篇01 提权安全狗服务器
  4. db2时间差换成月_DB2 日期函数计算日期差
  5. 树莓派开发界面显示温度_关于树莓派linux开发板
  6. 计算机网络-UDP和TCP套接字编程
  7. python:sklearn 标签编码(LabelEncoder)
  8. android 开启离屏缓存,Android性能优化笔记(持续更新帖)
  9. mysql事务隔离的锁_mysql锁及四种事务隔离级别笔记
  10. 周期T与频率f数量级对应关系(MHz--μs)