2016-10-17 47 views
0

为什么这条sql指令不起作用...?更新 - where子句中的聚合函数

我想更新了15%的工资谁拥有的薪水低于平均水平的所有员工...

UPDATE Employers SET salary=salary * 1.15 WHERE salary < (SELECT AVG(salary) FROM Employers);

感谢。

+1

这是什么给你的错误?你最后错过了一个''''。 '(SELECT AVG(salary)FROM Employers);' – Santi

+0

对不起:)。但这不是问题...在MySQL中,我有以下消息: #1093 - 表'雇主'被指定两次,既作为'UPDATE'的目标,也作为数据的单独来源。 – nosperov

+0

不幸的是,你似乎在争夺MySQL的限制:[“你无法更新表并从子查询中的同一个表中选择。”](http://dev.mysql.com/doc/refman/5.7/ EN/update.html)。不是说没有解决方案,个人我只是不知道它。知道更多的人可能能够为您提供解决方案! – Santi

回答

0

可能是你需要一个别名

UPDATE Employers 
    SET salary=salary * 1.15 
    CROSS JOIN ((SELECT AVG(salary) avg_salary FROM Employers)) t 
    WHERE salary < t.avg_salary;