2016-10-17 81 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;