所以我有 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/

10-09 00:43