更新查询“您不能在FROM子句中指定目标表'a'进行更新”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新查询“您不能在FROM子句中指定目标表'a'进行更新”相关的知识,希望对你有一定的参考价值。

我正在尝试添加新列,并希望根据某些条件来更新其值,但是它不允许我这样做,因为它说“您不能在FROM子句中指定目标表'a'用于更新”

任何想法,该怎么做?

MySQL的

ALTER TABLE test ADD COLUMN step1_pincode VARCHAR(20);

UPDATE test a SET a.step1_pincode = 
(
SELECT CASE WHEN b.RetailerPincode IS NOT NULL 
       THEN RetailerPincode
       ELSE b.StorePartyPincode
END AS step1_pincode1
FROM test b
);
答案

mysql中,您无法在SET期间在UPDATE子句中指定相同的表。而且,在您的情况下,您实际上不需要子查询。您可以直接直接使用条件CASE .. WHEN表达式。尝试以下操作:

UPDATE test a 
SET a.step1_pincode = CASE WHEN a.RetailerPincode IS NOT NULL 
                           THEN a.RetailerPincode
                           ELSE a.StorePartyPincode
                      END

正如@TimBiegeleisen在注释中正确建议的那样,您实际上可以使用COALESCE()函数以简洁的方式编写此查询:

COALESCE()

以上是关于更新查询“您不能在FROM子句中指定目标表'a'进行更新”的主要内容,如果未能解决你的问题,请参考以下文章

Access 2016 - 简单更新查询给出“操作必须使用可更新查询”错误

使用子查询更新与使用连接更新 - 性能更好

更新查询更新不起作用

update更新一条查询结果

如何在oracle中将两个更新查询合并为单个更新查询?

sql更新怎么根据条件查询到了更新没有匹配到的数据不更新