然后SELECT子句更新数据

时间:2014-05-15 14:54:16

标签: sql oracle

表:员工与应用

//Employee
NAME            SALARY
-----------------------
CHIRS           40000
JOHN            30000
MARY            20000

//Application
NAME          P#
-----------------
CHIRS        0001
JOHN         0002

如上表所示,我们可以看到只有MARY没有任何申请,所以MARY的工资将增加10%

以下查询:

UPDATE FROM EMPLOYEE E SET E.SALARY = E.SALARY*1.10
WHERE NOT EXISTS (SELECT NAME FROM APPLICATION);

我的以下查询是正确还是错误?谢谢你

2 个答案:

答案 0 :(得分:1)

您需要一个相关的子查询:

UPDATE FROM EMPLOYEE E
    SET E.SALARY = E.SALARY*1.10
    WHERE NOT EXISTS (SELECT 1 FROM APPLICATION A WHERE A.NAME = E.NAME);

如果没有相关性,子查询将始终返回2行。显然,这些存在,因此where子句总是失败。

答案 1 :(得分:0)

UPDATE FROM EMPLOYEE E
SET E.SALARY = E.SALARY*1.10
WHERE (SELECT COUNT(A.Name) FROM APPLICATION A WHERE A.NAME = E.NAME) = 0;

如果您尝试使用“Count”子句

,查询的性能可能会提高