如何在Oracle中更新多行

wtlkbnrh  于 2023-10-16  发布在  Oracle
关注(0)|答案(5)|浏览(129)

我想更新所有不同的记录不同的值多行,但没有任何想法如何做到这一点,我使用下面的SQL更新单记录,但我有200多条记录更新

update employee
set staff_no = 'ab123'
where depno = 1

我有50个部门,在这些部门,我需要更新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
4dbbbstv

4dbbbstv1#

您应该能够使用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
pengsaosao

pengsaosao2#

使用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
ahy6op9u

ahy6op9u3#

对于条件更新,可以使用多个update语句,也可以在SET子句中使用CASE表达式。
比如说

UPDATE table
SET schema.column =  CASE
                        WHEN column1= 'value1' AND column2='value2' THEN
                          'Y'
                        ELSE
                          'N'
                     END

我希望你试着在这个网站上搜索一个类似的问题,最近有一个问题,这是我的答案。

vqlkdk9b

vqlkdk9b4#

如果你有两张table,比如:

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);
yuvru6vn

yuvru6vn5#

不知道你的数据库设置是什么,但对我来说,我用一些简单的PLSQL解决了类似的问题。
假设您有两个表:
1.“request”表,具有多列,其中一列是“date”列,其主键是“id”
1.“item”表,有许多列,其中一列也是“date”列,另一列是指向其所属请求的指针,称为“request_id”
假设这是针对用户对一个或多个项目进行购买请求的情况,一对多关系,因此项目上的日期列应该与它们所属的请求的日期列相匹配。
现在让我们假设请求上的日期列意外地留空,但幸运的是不是项目的日期。因此,我们希望更新请求日期列,使其与相应项目的日期值相匹配。因此,对于每个请求,取其中一个项目,取item.date,并使用PLSQL将www.example.com设置request.date为这个item.date:

begin
for iteration_row in
(select distinct r.id as r_id_from_select, i.date as i_date_from_select
  from request r
    join item i on item.request_id = r.id)
loop
  update request r_to_update
  set date = iteration_row.i_date_from_select
  where r_to_update.id = iteration_row.r_id_from_select
end loop;
end;

另一个PLSQL循环通过select的例子,但这个没有像我上面那样更新:https://stackoverflow.com/a/49635601/2888009

相关问题