Heim > Fragen und Antworten > Hauptteil
Diese Lösung für Interviewfragen funktioniert nicht, da ich zwei Spalten in der Unterabfrage habe, wenn ich danach die IN
代替 = ,则无法使用
位于 LIMIT
WHERE
-Klausel verwende. Ich verwende MySQL.
UPDATE employees SET salary = salary + (0.10*salary) WHERE team = ( SELECT team, AVG(salary) avg_sal FROM employee GROUP BY team ORDER BY avg_sal LIMIT 1)
Die obige Abfrage löst den folgenden Fehler aus:
SQL 错误 [1241] [21000]:操作数应包含 1 列
Wenn WHERE
子句后面使用 IN
而不是 =
in der obigen Abfrage enthalten ist, wird der folgende Fehler ausgegeben:
SQL 错误 [1235] [42000]:此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”
Die erwartete Lösung ist wie im Titel angegeben:
平均工资最低的部门加薪10%
Wie kann ich diese Abfrage umschreiben, um dieses Problem zu lösen?
P粉1551282112024-01-17 14:52:03
您可以让子查询仅返回团队而不是两列。也许,这是您想要编写的查询:
update employees e set e.salary = 1.1 * e.salary where team = (select team from employees group by team order by avg(salary) limit 1)
不幸的是,这会引发错误:
这是 MySQL 的一个典型限制,它不允许您重新打开在 where
子句中更新的表。相反,您可以加入
:
update employees e inner join (select team from employees group by team order by avg(salary) limit 1) e1 on e1.team = e.team set e.salary = 1.1 * e.salary