繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM