使用子查询的SQL Update列值

时间:2011-08-15 12:26:24

标签: mysql sql sql-update

在MySQL数据库表中,我想UPDATE一些包含查询结果的行。

例如,我有一张桌子

TABLE employees(
  employeeId int,
  salary int,
)

我希望UPDATE仅显示以下查询中显示的行,其中employeeId匹配且newSalary成为salary的修改值

(SELECT employeeId, newSalary FROM ....)

我原本以为将结果加载到临时表中,但我不确定如何获取SET值,如此处所示

UPDATE employees
SET salary = (???)
WHERE employeeId exists in tempTable

您可能会评论这导致非规范化,我知道这一点。我怀疑会有一些“你不想这样做”的类型回复,为了简洁起见,请假设我有充分的理由。

3 个答案:

答案 0 :(得分:10)

加入你要更新的子查询和你的表:

UPDATE employees x INNER JOIN (
    SELECT employeeId, newSalary FROM ....
) y ON x.employeeId=y.employeeId
SET x.salary=y.newSalary

答案 1 :(得分:1)

update employees, tempTable
set employees.salary=tempTable.newSalary
wnere employees.employeeId=tempTable.employeeId;

答案 2 :(得分:1)

update employees
inner join temptable
on employees.employeeid = temptable.employeeid
set employees.salary = temptable.newsalary