2016-08-29 15 views
0

複数行の列を更新しようとしています。以下は、私が唯一のアクティブなプラン(= NULL)を持たないメンバーのアカウントに無料クレジットを追加したい、ということです私は何をしようとしている私のクエリ条件に基づいて複数の行の列値を更新する

UPDATE [Members] 
SET [Credits]=[Credits][email protected] 
WHERE [ID] IN (SELECT T1.[MemberID] 
       FROM @Members T1 
       RIGHT JOIN [Members] T2 ON T1.MemberID!=T2.ID 
       WHERE T2.ActivePlan IS NULL) 

です。メンバの一覧は@Membersのテーブル値パラメータで、[Members]はテーブルです。

クエリが期待どおりに機能していません。 [ActivePlan]NULLに等しくない場合でも、すべてのメンバーにクレジットを追加しています。 1つの更新クエリを使用してこれを達成する方法を教えてください。

答えて

0

右結合は使用しないでください。ちょうど内部結合をしてください。このように試してみてください。

UPDATE T2 
SET [Credits] = [Credits] + @FreeCredits 
FROM @Members T1 
INNER JOIN [Members] T2 ON T1.MemberID = T2.ID 
WHERE T1.ActivePlan IS NULL 
+0

ありがとう@StackUser私はジョインを使用せずに解決策を見つけました。テストケースで失敗するかどうか見て、教えてください。 –

+0

私の編集した回答を確認してください。 – StackUser

0

申し訳ありませんが、皆さん気にしてください。突然私の質問を投稿した後、解決策は私の心の中をクリックした。私は単純なクエリの後にそれを試してみました:

UPDATE [Members] SET [Credits]=[Credits][email protected] WHERE [ID] IN (SELECT [MemberID] FROM @Members) AND [ActivePlan] IS NULL 

問題があるかどうか確認してください。ありがとうございました:)

関連する問題