我试图使用sql只更新一行,但我遇到了麻烦。
我正在尝试做这样的事情:
$sql="UPDATE table SET age='$age' WHERE id=(SELECT id FROM another_table WHERE somecondition ORDER BY id LIMIT 1)";
但这不是更新任何东西。我觉得括号的位置有一些错误,但我不确定它究竟出了什么问题。有人有什么想法吗?或者就如何仅更新满足给定条件的一行提出其他建议?
编辑备注:
好吧,我可能让我的问题太复杂了。让我重新解释一下我的问题;只更新满足特定条件的1行的通用方法是什么。如果行符合条件,它可以是任何行。
答案 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。这有点难以修复,更好地理解数据和数据结构。