所以我有 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
最佳答案
当条件满足时,您的代码正在更新 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?关于特定用户的 SQL If 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47963598/