



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表一、MS SQL Server 多表关联更新 sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引用要更新的表以外的其它数据。 一般形式:update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B WHERE 逻辑表达式例如: UPDATE dbo.Table2 SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB FROM dbo.Table2 INNER JOIN dbo.Table1 ON (dbo.Table2.ColA = dbo.Table1.ColA); 实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的二、Oracle 多表关联更新 Oracle没有update from语法,可以通过两种实现方式:1、利用子查询: update A SET 字段1=(select 字段表达式 from B WHERE .), 字段2=(select 字段表达式 from B WHERE .) WHERE 逻辑表达式 UPDATE多个字段两种写法:写法一:UPDATE table_1 a SET col_x1 = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m), col_x2 = (SELECT b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)WHERE EXISTS (SELECT * FROM table_2 b WHERE b.col_n = a.col_m)或UPDATE table_1 a SET col_x1 = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m), col_x2 = (SELECT b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)WHERE a.col_m=(SELECT b.col_n FROM table_2 b WHERE b.col_n = a.col_m)写法二:UPDATE table_1 a SET (col_x1, col_x2) = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)WHERE EXISTS (SELECT * FROM table_2 b WHERE b.col_n = a.col_m);或UPDATE table_1 a SET (col_x1, col_x2) = (SELECT b.col_y1, b.col_y2 FROM table_2 b WHERE b.col_n = a.col_m)WHERE a.col_m=(SELECT b.col_n FROM table_2 b WHERE b.col_n = a.col_m)注意: 1. 对于子查询的值只能是一个唯一值,不能是多值。 2. 子查询在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。且where EXISTS子句可用另一方法代替,如上。最后的子句是对a表被更新记录的限制,如无此句,对于a表中某记录,如在b表中关联不到对应的记录,则该记录被更新字段将被更新为null。where EXISTS子句就是排除对a表中该情况的记录进行更新。2、利用视图:UPDATE (SELECT A.NAME ANAME,B.NAME BNAME FROM A,B WHERE A.ID=B.ID)SET ANAME=BNAME; 注意: 1. 对于视图更新的限制: 如果视图基于多个表的连接,那么用户更新(update)视图记录的能力将受到限制。除非update只涉及一个表且视图列中包含了被更新的表的整个主键,否则不能更新视图的基表。另外,Oracle中的Delete的from子句也没有多表联接的功能,只能通过子查询的方式来做:delete from 表A where exists (select * from 表B where 表A.empid=表B.empid)delete from 表A where 表A.empid in (select empid from 表B)三、oracle视图多表更新在oracle中通常如果视图的数据源来自单表则该视图可以进行更新。而如果视图数据源来自两个以上表时这个视图是不可更新的。但有时候为了操作的方便我们更希望能够对多表视图也进行更新。这时候我们可以通过建立更新触发器来替代该视图原有更新以达到多表更新的效果例如:3.1 创建测试数据表-=-创建测试表-=Drop Table t1;Drop Table t2;create table t1( t11 numeric(28),t12 varchar2(20);create table t2( t11 numeric(28),t22 varchar2(20);3.2 多表视图范例-=-创建测试视图-=create Or Replace view t as select T1.t11 f1 ,T1.t12 f2 ,T2.t22 f3 from T1,T2 Where T1.t11=T2.t11;3.3 多表视图触发器范例-=-创建视图的替代触发器-=Create Or Replace Trigger Trg_InsUpdDel_tInstead Of Insert or update or deleteon tfor each rowDeclarebegin If Inserting Then Insert Into t1 (t11,t12) Values (:New.f1,:New.f2); Insert Into t2 (t11,t22) Values (:New.f1,:New.f3); elsif Updating Then Update t1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1; Update t2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生产制造行业标准操作流程指南
- 企业团队协作项目管理框架
- 技术文档撰写与审核流程模板
- 工程项目质量控制标准化检测模板
- 智能化装备安全防护责任书9篇
- 美丽的天池300字9篇
- 农村信息技术服务支持协议文本
- 企业文档分类管理与搜索工具
- 供应链稳定持续承诺函8篇
- 企业风险管理标准化工具与应急预案制定
- 新闻编辑(修改版)马工程课件 第六章
- GB/T 2930.8-2017草种子检验规程水分测定
- 勘察设计工作大纲
- GB/T 17188-1997农业灌溉设备滴灌管技术规范和试验方法
- 关于国有集团公司采购管理办法【五篇】
- 2022年资阳市雁江区社区工作者招聘考试笔试试题及答案解析
- 2.2 第2课时 基本不等式的综合应用(课件)高一数学(人教A版2019必修第一册)
- 帮助卧床老年人使用便器排便课件
- 【高考英语精品专题】必修1 Unit 1 Life Choices-高考英语-一轮总复习备考方略课件PPT(新教材北师大版)
- 中国传媒大学-新媒体概论(刘行芳)-课件
- 医学放射卫生相关法律法规ppt培训课件
评论
0/150
提交评论