我真的后悔不得不问 - 但是我整晚都搜索过,并没有找到解决我问题的解决方案。请原谅。
我有一个更新,我试图在引用同一个表的表上运行。我很确定我必须进行重命名,但我无法正常运行。任何帮助将不胜感激。
这是我的查询,它被接受,但它没有修改表格。
update parts
set price = price * .85
where price > (select avg(price));
提前致谢。
答案 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 ;
在update
或delete
语句中,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不会混淆它们。