是否可以同时更新多行?
以下查询返回当前部门的信息,员工正在处理。
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
例如,以下是我的表格样本:
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
所以上面的查询将返回
empID departmentID
1 3
2 3
3 1
现在基于这些返回值,我想一次更新我的表。
目前我正在使用for循环一次更新这些值(性能非常慢),
我的更新查询是:
for row in somerows:
UPDATE facttable SET deparment = row[1] WHERE empID = row[0]
...
但我想知道是否可以在不使用循环的情况下立即更新所有这些值。
修改
我有一张桌子。我需要查询同一个表。此表与任何其他表无关。 表结构是:
Table Name : Employee
Fields: EmpID varchar
DeptID varchar
myDate date
答案 0 :(得分:10)
你可以试试这个
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)
这只是一个例子,你可以根据你的情况扩展它。
查看manual了解详情
答案 1 :(得分:2)
你能试试吗?
UPDATE customer c
SET depatmentID =
( SELECT a.deparmentID
FROM customer a
INNER JOIN
( SELECT empID
, max(myDate) AS md
FROM customer
GROUP BY empID
) AS z
ON z.empID = a.empID
AND z.md = a.myDate
WHERE a.empID = c.empID
)
或者这个:
UPDATE customer AS c
SET depatmentID = a.derpmentID
FROM customer a
INNER JOIN
( SELECT empID
, max(myDate) AS md
FROM customer
GROUP BY empID
) AS z
ON z.empID = a.empID
AND z.md = a.myDate
WHERE a.empID = c.empID
答案 2 :(得分:-2)
只有在您想要使用相同的值更新每个值时才可以这样做,然后您可以将where子句与IN一起使用。