2011-08-15 145 views
5

在MySQL數據庫表中,我想要UPDATE某些行與查詢結果。使用子查詢SQL更新列值

舉例來說,我有一個表

TABLE employees(
    employeeId int, 
    salary int, 
) 

,我想UPDATE只出現在下面查詢中的行,用employeeId小號匹配,並與newSalary成爲salary

(SELECT employeeId, newSalary FROM ....) 
修改後的值

我本來以爲將結果加載到臨時表中,但我不知道如何獲得SET值,如此處所示

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

您可能會評論這導致非規範化,我意識到這一點。我懷疑會有一些「你不想這樣做」的類型迴應,爲了簡潔起見,請假設我有一個很好的理由。

回答

10

加入子查詢和你的表,你會更新:

UPDATE employees x INNER JOIN (
    SELECT employeeId, newSalary FROM .... 
) y ON x.employeeId=y.employeeId 
SET x.salary=y.newSalary 
1
update employees, tempTable 
set employees.salary=tempTable.newSalary 
wnere employees.employeeId=tempTable.employeeId; 
1
update employees 
inner join temptable 
on employees.employeeid = temptable.employeeid 
set employees.salary = temptable.newsalary