免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 搪瓷智能生产数据分析系统创新创业项目商业计划书
- 建筑五金配件出口市场拓展创新创业项目商业计划书
- 城市通勤折叠电动车创新创业项目商业计划书
- 统编版(2024)二年级上册道德与法治第12课 家乡新变化 教案(表格式)
- 2025年营口辅警协警招聘考试备考题库及一套答案详解
- 2025年西安辅警协警招聘考试真题及一套答案详解
- 2025年菏泽辅警协警招聘考试备考题库含答案详解(巩固)
- 2025年玉林辅警招聘考试真题附答案详解(夺分金卷)
- 2025年甘肃辅警协警招聘考试备考题库含答案详解(综合卷)
- 2025年石家庄辅警招聘考试题库含答案详解(综合卷)
- 塔磨机安全操作规程
- 消防水泵房巡检签到表
- vas疼痛评分完整版
- 全科医师转岗培训理论考试试题及答案
- 公会之间挂靠主播合作协议书
- 实验三基因组序列分析
- 2022年澄迈县辅警招聘笔试试题及答案解析
- 小学语文人教三年级上册 童话中有趣的角色
- 2022年临沧边境经济合作区国有资本投资运营有限公司招聘笔试试题及答案解析
- 思想道德与法治课件:第六章 第三节 维护宪法权威
- 高边坡锚杆施工记录表
评论
0/150
提交评论