我想为所有不同的记录更新具有不同值的多行,但不知道该怎么做,我正在使用下面的 sql 更新单个记录,但我有 200 多条记录要更新
update employee
set staff_no = 'ab123'
where depno = 1
Run Code Online (Sandbox Code Playgroud)
我有 50 个 dep,在这些 dep 中,我需要更新 200 多个员工编号。任何的想法。目前如果我只是做一个
select * from Departments
Run Code Online (Sandbox Code Playgroud)
我可以看到需要员工无需更新的所有员工的列表。
UPDATE person
SET staff_no =
CASE person_no
WHEN 112 THEN 'ab123'
WHEN 223 THEN 'ab324'
WHEN 2343 THEN 'asb324'
and so on.....
END
Run Code Online (Sandbox Code Playgroud)
您应该能够使用MERGEstatement 一次性完成。但是,该语句将相当大:
MERGE INTO employee e
USING (
SELECT 1 as d_id, 'cd234' as staff_no FROM Dual
UNION ALL
SELECT 2 as d_id, 'ef345' as staff_no FROM Dual
UNION ALL
SELECT 3 as d_id, 'fg456' as staff_no FROM Dual
UNION ALL
... -- More selects go here
SELECT 200 as d_id, 'za978' as staff_no FROM Dual
) s
ON (e.depno = S.d_id)
WHEN MATCHED THEN UPDATE SET e.staff_no= s.staff_no
Run Code Online (Sandbox Code Playgroud)
使用 case 表达式
UPDATE employee
SET staff_no =
CASE depno
WHEN 1 THEN 'ab123'
WHEN 2 THEN 'ab321'
--...
ELSE staff_no
END
WHERE depno IN ( 1, 2 ) -- list all cases here. use a subquery if you don't want to / cannot enumerate
Run Code Online (Sandbox Code Playgroud)