NOT EXISTS如何在SQL中的以下UPDATE语句中工作?

时间:2018-01-29 05:46:39

标签: sql

我有以下查询:

UPDATE movieexec e
SET    e.salary = 6m
WHERE  NOT EXISTS (SELECT *
                   FROM   movieexec e2
                   WHERE  e2.salary = 6m); 

它如何在逻辑上运作?我不能只说WHERE e.Salary != 6M吗?

2 个答案:

答案 0 :(得分:3)

如果“MovieExec”表中没有行,其工资值为“6M”,那么所有行都将更新为“6M”。

如果在更新语句之前甚至有一行的工资值为“6M”,则会影响0行。

基本上它会检查是否存在值为“6M”的行,并且仅当不存在具有值“6M”的单行时更新(如您在WHERE NOT EXISTS语句中指定的那样),并且它不是与你的where子句中的工资相同!= 6M。

此代码类似于:

IF NOT EXISTS(SELECT *   FROM    MovieExec e2
                     WHERE  e2.Salary   =   6M)
BEGIN

    UPDATE  MovieExec e 
    SET e.Salary =  6M 

END  

但写在一份声明中。

答案 1 :(得分:1)

我认为您希望使用6M更新所有记录salary不等于6m。如果是这样,您可以简单地编写SQL,如下所示:

UPDATE MovieExec SET Salary =  6M
WHERE Salary <> 6M

刚刚注意到@Badiparmagi在评论中已经提到过,我认为他是完全正确的。

如果您希望任何6M工资已经存在,那么请不要更新任何记录,否则请更新所有记录

UPDATE  MovieExec   
SET Salary =  6M --This should be enclosed in single quote                                                                                                                                                           
WHERE (SELECT COUNT(*) FROM MovieExec e2 WHERE e2.Salary = 6M) = 0