如何在oracle中更新多行

时间:2015-02-19 14:22:17

标签: sql oracle

我想为所有不同的记录更新具有不同值的多行,但不知道如何做到这一点,我使用下面的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

4 个答案:

答案 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是我的回答。