[英]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。 这很难修复,可以更好地理解数据和数据结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.