0

これは、データベース内にあるクエリです

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

ご覧のとおり、更新する必要がある唯一のレコードは、NewCustomer.Provider が ACTList.Provider と等しくないレコードですが、実際にはすべてのフィールドを更新しています。

誰かがこれがなぜなのか教えてもらえますか?

4

3 に答える 3

0

各行がActListの少なくとも1つの行と等しくないため、クエリではすべての行が選択されます。外部結合を使用して、nullをチェックできます。

UPDATE NewCustomer LEFT JOIN ACTList ON NewCustomer.NewProvider = ACTList.Provider SET NewCustomer.Status = "Denied Not Freemail"
WHERE (((ACTList.Provider) Is Null));
于 2012-04-24T14:04:42.577 に答える
0

試す:

UPDATE NewCustomer 
SET NewCustomer.Status = "Denied Not Freemail"
FROM NewCustomer INNER JOIN ACTList 
WHERE NewCustomer.NewProvider<>ACTList.Provider;
于 2012-04-24T10:25:52.983 に答える
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
于 2012-04-24T10:29:50.283 に答える