2016-10-17 11 views
0

このSQL命令が機能しないのはなぜですか?where句の更新集約関数

私は平均より低い給料を持っているすべての従業員のために15%の給与を更新したい...

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

感謝。

+1

を必要とするだろうか?あなたは最後に向かって ')'が欠けています。 '(雇用者からのAVG(給与)の選択); – 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;