表:员工与应用
//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);
我的以下查询是正确还是错误?谢谢你
答案 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”子句
,查询的性能可能会提高