我想为所有不同的记录更新具有不同值的多行,但不知道如何做到这一点,我使用下面的sql更新单个记录,但我有200多条记录要更新
update employee
set staff_no = 'ab123'
where depno = 1
我有50个dep,在那些dep中我需要更新200多名员工没有。任何的想法。 目前,如果我只是做一个
select * from Departments
我可以看到所有需要员工不更新的员工名单。
UPDATE person
SET staff_no =
CASE person_no
WHEN 112 THEN 'ab123'
WHEN 223 THEN 'ab324'
WHEN 2343 THEN 'asb324'
and so on.....
END
答案 0 :(得分:4)
您应该能够使用MERGE
语句一次性执行此操作。但是,声明会相当大:
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
答案 1 :(得分:1)
使用案例表达
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
答案 2 :(得分:1)
如果您有两个表:
CREATE TABLE test_tab_1 (id NUMBER, name VARCHAR2(25));
CREATE TABLE test_tab_2 (id NUMBER, name VARCHAR2(25));
您可以使用UPDATE
声明,如下所示:
UPDATE test_tab_1
SET test_tab_1.name = (SELECT test_tab_2.name FROM test_tab_2
WHERE test_tab_1.id = test_tab_2.id);
答案 3 :(得分:0)
对于条件更新,您可以使用多个更新语句,或在 SET子句中使用 CASE 语句。
类似的东西,
UPDATE table SET schema.column = CASE WHEN column1= 'value1' AND column2='value2' THEN 'Y' ELSE 'N' END
我希望您尝试在此网站上搜索类似的问题,最近有一个问题,this是我的回答。