我必须更新MySQL数据库中的表中的多行,其中查找要更新的行的条件位于同一个表中。
例如,我有一个名为“cdrs”的表。表中有一列名为“tf”,这是我必须更新的一列。 具有更新或不更新行的条件的列是“calltype”。 “recordId”是该表的关键。 我正在使用的查询就是这个:
UPDATE cdrs
SET tf = 1
WHERE recordId in (SELECT recordId from cdrs WHERE calltype = 11);
但是使用此查询,我收到以下错误:
错误代码:1093。您无法为更新指定目标表'cdrs' FROM子句。
我在这里搜索过,说实话,在这个问题上发现了很多帖子,但是当SET子句中的同一个表而不是WHERE时,所有这些都处理了这个问题。 例如,我发现这篇文章: MySQL Error 1093 - Can't specify target table for update in FROM clause
我尝试使用这个想法但没有成功。
有没有人遇到同样的问题并找到解决方案? 我非常感谢您解决这个问题。
非常感谢, Joao Paulo
答案 0 :(得分:2)
你可以做简单的请求:
UPDATE cdrs SET tf = 1 WHERE calltype = 11;
答案 1 :(得分:0)
问题的一般答案是,您不能在子查询中使用与主更新查询中相同的表,您可以通过一个技巧来解决这个问题:
UPDATE cdrs
SET tf = 1
WHERE recordId in (SELECT recordId from (SELECT * FROM cdrs) innerCdrs WHERE calltype = 11);
这样做是因为您不是使用表cdrs
而是根据查询SELECT * FROM cdrs
创建临时表。
但是在您的情况下,您的查询可以大大简化为
UPDATE cdrs SET tf=1 WHERE calltype=11
答案 2 :(得分:0)
就像UPDATE cdrs SET tf = 1 WHERE calltype = 11;