sql只更新一行

时间:2016-01-21 14:45:53

标签: php mysql sql

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

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

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

但这不是更新任何东西。我觉得括号的位置有一些错误,但我不确定它究竟出了什么问题。有人有什么想法吗?或者就如何仅更新满足给定条件的一行提出其他建议?

编辑备注:

好吧,我可能让我的问题太复杂了。让我重新解释一下我的问题;只更新满足特定条件的1行的通用方法是什么。如果行符合条件,它可以是任何行。

3 个答案:

答案 0 :(得分:2)

首先应该运行此查询:

SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1

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

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

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

答案 1 :(得分:1)

我发现,根据子查询中的条件进行更新(如示例所示),由于数据库试图找出最佳执行路径,因此有时会出现似乎的问题。我发现做以下事情更好,注意我的代码是在T-SQL中,并且可能需要调整smidgen才能在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]

答案 2 :(得分:0)

尝试运行此查询:

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。这有点难以修复,更好地理解数据和数据结构。