SQL 仅更新一行


sql updating only one row

我试图使用 sql 只更新一行,但我遇到了麻烦。

我正在尝试做这样的事情:

$sql="UPDATE table SET age='$age' WHERE id=(SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1)";

但这并没有更新任何东西。我觉得括号的位置有一些错误,但我不确定它到底出了什么问题。有人知道吗?或者对如何仅更新满足给定条件的一行有其他建议?

编者按:

好吧,我可能把我的问题弄得太复杂了。让我重新表述我的问题;仅更新满足某些条件的 1 行的通用方法是什么。如果行满足条件,则可以是任何行。

您应该首先运行此查询:

SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1

并查看结果,如果您获得特定值,例如1,请将您的代码更新为

$sql="UPDATE table SET age='$age' WHERE id=(1)";

你可以看到结果。 如果查询未产生错误,则不会考虑您的条件,并且表table中没有1 ID。

我发现基于子查询中的条件进行更新(如您的示例所示)有时会出现问题,这些问题似乎是由于数据库试图找出最佳执行路径。我发现最好做如下事情,注意到我的代码是T-SQL的,可能需要稍微调整才能在MySQL中工作。

UPDATE T1 SET age=@Age
FROM table as T1 INNER JOIN
     another_table as T2 ON T1.id = T2.id
WHERE [use appropriate conditions here]

尝试运行此查询:

UPDATE table t
    SET t.age='$age'
    WHERE t.id = (SELECT a.id
                  FROM another_table a
                  WHERE somecondition
                  ORDER BY a.id
                  LIMIT 1
                 );

此错误的一个不常见的原因是id列具有不同的名称。 您应该养成限定列名的习惯。 还应验证两个表中的 ID 是否匹配。

另一个原因只是匹配的条件不返回不在表中的行或 ID。 这有点难以修复,可以更好地理解数据和数据结构。