注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Memory extender

Beautiful Day..

 
 
 

日志

 
 

用B表中记录的值更新A表中的记录  

2010-10-14 14:14:28|  分类: SQL&PL/SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
emp、emp1两表,结构相同,emp.empno=emp1.empno。
以emp1表中记录的sal去更新相应emp中记录的sal。
有一点要注意的地方,如下为例子,或许考试或面试题中容易出现这样的情形。。
----------------------------------------------------------------------------------------------------------------------
Connected to Oracle9i Enterprise Edition Release 9.2.0.6.0 
Connected as xxx
 
SQL> create table emp1 as
  2  select * from emp
  3  where rownum=1;
 
Table created
 
SQL> select * from emp1;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20
 
SQL> update emp1
  2  set sal=9999
  3  where empno=7369;
 
1 row updated
 
SQL> commit;
 
Commit complete

SQL> select * from emp1;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17    9999.00               20
 
SQL> select * from emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
 7788 SCOTT      ANALYST    7566 1982-12-9     3000.00               20
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1983-1-12     1100.00               20
 7900 JAMES      CLERK      7698 1981-12-3      950.00               30
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
  343                                                            
 1111                                             1.00               30
 
16 rows selected
 ------------------------------------------------------------------------------------------------------------------
 以上为待测试数据
 ------------------------------------------------------------------------------------------------------------------
SQL> update emp
  2  set sal=
  3  (select sal from emp1 where emp1.empno=emp.empno);
 
16 rows updated
 
SQL> select * from emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17    9999.00               20
 7499 ALLEN      SALESMAN   7698 1981-2-20                300.00     30
 7521 WARD       SALESMAN   7698 1981-2-22                500.00     30
 7566 JONES      MANAGER    7839 1981-4-2                            20
 7654 MARTIN     SALESMAN   7698 1981-9-28               1400.00     30
 7698 BLAKE      MANAGER    7839 1981-5-1                            30
 7782 CLARK      MANAGER    7839 1981-6-9                            10
 7788 SCOTT      ANALYST    7566 1982-12-9                           20
 7839 KING       PRESIDENT       1981-11-17                          10
 7844 TURNER     SALESMAN   7698 1981-9-8                   0.00     30
 7876 ADAMS      CLERK      7788 1983-1-12                           20
 7900 JAMES      CLERK      7698 1981-12-3                           30
 7902 FORD       ANALYST    7566 1981-12-3                           20
 7934 MILLER     CLERK      7782 1982-1-23                           10
  343                                                            
 1111                                                                30
 
16 rows selected
可以看到所有记录都被更新,empno不存在于emp1中的记录的SAL被更新为空。需要加where exists来限定要更新的记录。
SQL> rollback;
 
Rollback complete
 
SQL> update emp
  2  set empno=(select sal from emp1 where emp1.empno=emp.empno)
  3  where exists (select 1 from emp1 where emp1.empno=emp.empno);
 
1 row updated
  评论这张
 
阅读(388)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017