所以我有2个用户,一个叫做admin,另一个叫admin2。
我已经编写了一个SQL查询,其中我希望增加特定帐户的成就,在我的情况下仅针对admin
,但尽管如此,用户admin2
的相同成就也是影响。我做错了什么?
DECLARE @Achievement1 INT
SELECT @Achievement1 = Achievement1
FROM [dbo].[Achievement]
WHERE [dbo].[Achievement].UserID = (SELECT [AccountID]
FROM [dbo].[Account]
WHERE [Username] = 'Admin')
IF (@Achievement1 < 100)
UPDATE [dbo].[Achievement]
SET [Achievement1] += 2
ELSE
UPDATE [dbo].[Achievement]
SET [Achievement1] += 0
答案 0 :(得分:6)
当满足条件时,您的代码正在更新Achievement
中的所有行。它不仅仅是更新匹配的行。
你的逻辑很复杂。我想你可以这样做:
UPDATE a
SET Achievement1 += 2
FROM dbo.Achievement a
WHERE a.Achievement1 < 100 AND
a.UserId = (SELECT ac.AccountId
FROM dbo.Account ac
WHERE ac.UserName = 'admin'
);
注意:在一个表中将UserId
与另一个表中的AccountId
匹配是非常令人困惑的。您确定比较不应该是用户ID还是帐户ID?
答案 1 :(得分:2)
不需要所有这些,您只需使用以下连接进行更新:
UPDATE a1
SET a1.[Achievement1] = CASE WHEN a1.Achievement1 < 100 THEN a1.[Achievement1] + 2
ELSE a1.[Achievement1] END
FROM [dbo].[Achievement] AS a1
INNER JOIN [dbo].[Account] AS a2 ON a1.UserID = a2.[AccountID]
WHERE a2.UserName = 'admin';