一次更新多行

Roh*_*ada 3 sql postgresql

是否可以同时更新多行?

以下查询返回当前部门的信息,员工正在处理.

SELECT  a.empID, a.deparmentID 
FROM customer a  
INNER JOIN (
 SELECT  f.empID, max(f.myDate) md 
 FROM customer f 
GROUP BY f.empID
) z ON z.empID = a.empID AND z.md = a.myDate
Run Code Online (Sandbox Code Playgroud)

例如,以下是我的表的示例:

empID       deparmentID         myDate
1           1                   2011-01-01
2           1                   2011-02-10
3           2                   2011-02-19
1           2                   2011-03-01
2           3                   2011-04-01
3           1                   2011-05-10
1           3                   2011-06-01
Run Code Online (Sandbox Code Playgroud)

所以上面的查询将返回,

empID   departmentID        
1       3
2       3
3       1
Run Code Online (Sandbox Code Playgroud)

现在基于这些返回值,我想一次更新我的表.

目前我使用for循环一次更新这些值(性能非常慢),

我的更新查询是:

for row in somerows:    
    UPDATE facttable SET deparment = row[1] WHERE empID = row[0]
    ...
Run Code Online (Sandbox Code Playgroud)

但我想知道是否可以在不使用循环的情况下立即更新所有这些值.

编辑:

我有一张桌子.我需要查询同一个表.此表与任何其他表无关.表结构是:

Table Name : Employee
Fields: EmpID varchar
        DeptID varchar
        myDate  date
Run Code Online (Sandbox Code Playgroud)

Bal*_*ash 11

你可以试试这个

UPDATE mytable
SET myfield = CASE other_field
    WHEN 1 THEN 'value1'
    WHEN 2 THEN 'value2'
    WHEN 3 THEN 'value3'
END
WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,你可以根据你的情况扩展它.

查看手册以获取更多信息