查询更新整个表

时间:2012-04-24 10:22:13

标签: database ms-access

这是我在数据库中的查询

UPDATE NewCustomer INNER JOIN ACTList ON NewCustomer.NewProvider<>ACTList.Provider SET       NewCustomer.Status = "Denied Not Freemail";

正如您所看到的,唯一应该更新的记录是NewCustomer.Provider不等于ACTList.Provider,但它实际上正在更新所有字段。

有人可以告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

尝试:

UPDATE NewCustomer 
SET NewCustomer.Status = "Denied Not Freemail"
FROM NewCustomer INNER JOIN ACTList 
WHERE NewCustomer.NewProvider<>ACTList.Provider;

答案 1 :(得分:0)

给它一个镜头(未经测试)。它基本上是WHERE NewCustomer.NewProvider NOT IN (),但效率更高。

UPDATE NewCustomer 
  SET NewCustomer.Status = "Denied Not Freemail"
LEFT JOIN ACTList ON NewCustomer.NewProvider = ACTList.Provider 
WHERE ACTList.Provider IS NULL

答案 2 :(得分:0)

您的查询选择了所有行,因为每行不等于ActList中的至少一行。您可以使用外部联接并检查空值。

UPDATE NewCustomer LEFT JOIN ACTList ON NewCustomer.NewProvider = ACTList.Provider SET NewCustomer.Status = "Denied Not Freemail"
WHERE (((ACTList.Provider) Is Null));