4.09 当相应行存在时更新
Posted 长城之上是千亿的星空,星空之上是不灭的守望。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.09 当相应行存在时更新相关的知识,希望对你有一定的参考价值。
问题:
仅当另一个表中相应的行存在时,更新某表中的一些行。例如,如果表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 当相应行存在时更新的主要内容,如果未能解决你的问题,请参考以下文章
当数据库(Oracle)中的某一个表的某行记录有更新时,怎样及时的通知应用程序。