MySQL Update查询同一个表

时间:2015-03-13 01:51:19

标签: mysql

我真的后悔不得不问 - 但是我整晚都搜索过,并没有找到解决我问题的解决方案。请原谅。

我有一个更新,我试图在引用同一个表的表上运行。我很确定我必须进行重命名,但我无法正常运行。任何帮助将不胜感激。

这是我的查询,它被接受,但它没有修改表格。

update parts 
set price = price * .85 
where price > (select avg(price));

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用join

update parts p join
       (select avg(price) as avgprice from parts) pp
       on p.price > pp.avgprice
    set p.price = p.price * 0.85 ;

updatedelete语句中,MySQL不允许您引用在查询的其余部分中修改的表。它是唯一具有此限制的数据库,但它也提供join语法作为替代方法。

答案 1 :(得分:0)

您的子查询需要FROM语句。

update parts p1 
set p1.price = p1.price * .85 
where p1.price > (select avg(p2.price) from parts p2);

如果没有'from',它会使用您当前的列,并且由于您没有按任何方式进行分组,它会对当前列的值进行平均处理,而该值本身也是如此,并且根据定义并不大于它本身。

另外,给表名别名,以便db不会混淆它们。