使用子查询的SQL Update列值

Mik*_*ike 5 mysql sql sql-update

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

例如,我有一张桌子

TABLE employees(
  employeeId int,
  salary int,
)
Run Code Online (Sandbox Code Playgroud)

我想UPDATE只显示下面查询中出现的行,employeeIds匹配并newSalary成为修改后的值salary

(SELECT employeeId, newSalary FROM ....)
Run Code Online (Sandbox Code Playgroud)

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

UPDATE employees
SET salary = (???)
WHERE employeeId exists in tempTable
Run Code Online (Sandbox Code Playgroud)

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

rab*_*dde 10

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

UPDATE employees x INNER JOIN (
    SELECT employeeId, newSalary FROM ....
) y ON x.employeeId=y.employeeId
SET x.salary=y.newSalary
Run Code Online (Sandbox Code Playgroud)