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 当相应行存在时更新的主要内容,如果未能解决你的问题,请参考以下文章

使用不存在的 hbase 行键更新行?

当数据库(Oracle)中的某一个表的某行记录有更新时,怎样及时的通知应用程序。

c# 从数据库中过滤出 NULL 行并更新现有行

mfc当listctrl控件有数据更新时是否就运行NM_CLICK消息相应函数

当 WHERE 存在时 sql server 更新

当代码从后面执行时,从 javascript 更新的文本框值不存在