很奇怪:无法在FROM子句中指定更新目标表

时间:2011-01-30 13:40:29

标签: php mysql sql database sql-update

我不明白为什么我的查询在phpMyAdmin和我的php脚本中运行正常它给我的消息:无法在FROM子句中指定更新目标表 !!!

update tableA set 
Field1 = round(round((select (select br.FieldA from tableB br where tableA.id=br.id and tableA.id2=br.id2) as x),4) - round(tableA.FieldA,4),4)

3 个答案:

答案 0 :(得分:3)

这是正确的。您无法在嵌套查询中选择您正在更新的同一个表。

更好的解决方案是在更新中使用联接。 http://dev.mysql.com/doc/refman/5.5/en/update.html

答案 1 :(得分:1)

这应该适用于多表更新:

UPDATE tableA, tableB
SET tableA.Field1 = round(round(tableB.FieldA, 4) - round(tableA.FieldA,4), 4)
WHERE tableA.id=tableB.id AND tableA.id2=tableB.id2;

http://dev.mysql.com/doc/refman/5.0/en/update.html

中搜索join

答案 2 :(得分:0)

你可以使用同一个表的多个副本这样做:

UPDATE tablename, tablename b 
SET tablename.col1 = val 
WHERE tablename.col1 = b.col1 AND b.col2 IN (val1,val2,val3);

上述查询中的val也可以是b.col2等变量。

相关问题