5

これが機能しない理由がわからない:

UPDATE 
    ust
SET  
    ust.isUnsubscribedFromSystemEmails = 1
FROM         
    UserSetting AS ust 
INNER JOIN
    [User] ON ust.userID = [User].userID 
AND 
    [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses)

平易な英語では、テーブル内の がユーザー テーブル内の と等しく、ユーザー テーブル内の が別のテーブルからの電子メールのリストにないフィールドを購読解除に設定しようとしていますisUnsubscribed。ほぼ同じ構文を使用して isUnsubbed 列で選択を実行できますが、正常に動作しますか? ありがとう!userIDUserSettinguserIDemailAddress

PSここで他の同様の質問を見てきましたが、構文は同じように見えますが、明らかに何かが欠けています。

4

5 に答える 5

10

ええ、あなたは何かを見落としています。

set ステートメントは、セットの左側にあるエイリアスを参照できません。

試す:

UPDATE  
    ust 
SET   
    isUnsubscribedFromSystemEmails = 1 
--select *
FROM          
    UserSetting AS ust  
INNER JOIN 
    [User] ON ust.userID = [User].userID  
WHERE [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses) 

コメントアウトされた選択を追加したので、必要な結果セットが得られていることを確認できます。

于 2010-09-20T15:23:11.403 に答える
2

UPDATE...FROM 構文は状況によっては不可欠ですが、私は可能な限りサブクエリを使用することを好みます。これはあなたが必要とすることをしますか?

UPDATE UserSetting
SET isUnsubscribedFromSystemEmails = 1
WHERE userID in (SELECT userID from [User]
                WHERE emailAddress in (SELECT emailAddress FROM BadEmailAddresses))
于 2010-09-20T15:50:38.420 に答える
0

試す:

UPDATE  
    UserSetting
SET   
    isUnsubscribedFromSystemEmails = 1 
FROM          
    UserSetting 
INNER JOIN 
    [User] ON UserSetting.userID = [User].userID  
AND  
    [User].emailAddress IN (SELECT emailAddress FROM BadEmailAddresses)
于 2010-09-20T15:42:58.063 に答える
0

これを試して :

UPDATE UserSetting ust SET usr.isUnsubscribedFromSystemEmails = 1
WHERE ust.emailAdress IN (select emailAddress from bademailAddresses);
于 2010-09-20T15:24:34.613 に答える
0

注: 記録のために (他のすべてが機能すると仮定して)、BadEmailAddressesテーブルで内部結合を実行することもできます。

パフォーマンス上の問題がある場合はemailAddress、両方のテーブルの列にインデックスを付けることができます。

于 2012-09-06T16:24:34.803 に答える