码迷,mamicode.com
首页 > 其他好文 > 详细

4.09 当相应行存在时更新

时间:2017-09-14 10:27:19      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:exists   语句   列表   操作   返回   方案   同时存在于   谓词   date   

问题:
仅当另一个表中相应的行存在时,更新某表中的一些行。例如,如果表emp_bonus中存在某位员工,则要将该员工的工资增加20%(在表emp中)。

解决方案:
为了可以将符合条件的员工工资增加20%,可以在update语句的where子句中使用子查询,用以找出哪些员工同时存在于表emp和emp_bonus中

update emp set sal = sal*1.20
    where empno in (select empno from emp_bonus)


讨论:
子查询返回的结果集确定了在表emp中哪些行可以被更新。谓词in用来检验emp中的empno值是否包含在由子查询返回的empno值列表当中,在此列表中时,相应的sal值被更新。

还可以使用exists子句来替代in:

update emp
    set sal = sal * 1.20
where exists (
    select null from emp_bonus 
        where emp.empno = emp_bonus.empno
)  


读者可能会奇怪在exists子查询中select列表中的NULL值,不要惊讶,NULL值对更新操作没有任何不利影响,我认为这样既增加了该语句的可读性,而且还强调了一个事实:与使用in操作符的查询不同,使用exists的解决方案中,由子查询的where子句决定要更新哪些行,而不是由子查询的select列表中的值决定

4.09 当相应行存在时更新

标签:exists   语句   列表   操作   返回   方案   同时存在于   谓词   date   

原文地址:http://www.cnblogs.com/liang545621/p/7518754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!