我有以下查询:
UPDATE movieexec e
SET e.salary = 6m
WHERE NOT EXISTS (SELECT *
FROM movieexec e2
WHERE e2.salary = 6m);
它如何在逻辑上运作?我不能只说WHERE e.Salary != 6M
吗?
答案 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