oracle 如何更新一列中多个表数据[重复]

67up9zun  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(144)

此问题已在此处有答案

Oracle SQL: Update a table with data from another table(7个回答)
8天前关闭
如何在一个查询中更新多个表中列?我尝试如下所示,但没有成功。

update orders o
inner join status s on o.order_status_id = s.status_id
set o.ords_stas_id='23' 
where o.location='DRS'
and s.stas_enable = '0';

[table](https://i.stack.imgur.com/Sjccj.png)有什么建议吗?

bnlyeluc

bnlyeluc1#

您希望更新位置为DRS且sta_enable = 0的所有订单。一个要更新的表,WHERE子句中有两个条件:

update orders o
set o.ords_stas_id = 23
where o.location = 'DRS'
and o.order_status_id in (select s.status_id from status s where s.stas_enable = 0);

只是为了提一下:有时候,我们确实有一个查询,它的联接都导致要更新的行和要设置的值。在这种情况下,我们将更新应用于查询。(但在你的陈述中并不是这样的;我们已经知道必须将ID设置为23。如果我们从状态表行中获取要在订单表中设置的ID,情况就是这样。)
我们可以这样写你的更新语句:

update
(
  select ords_stas_id as value, 23 as new_value 
  from orders o
  inner join status s on o.order_status_id = s.status_id
  set o.ords_stas_id = '23' 
  where o.location = 'DRS'
  and s.stas_enable = 0
)
set value = new_value;

这将做与我上面的查询相同的事情,只是以更复杂的方式。但是如果我们想使用状态表中的值,例如用s.some_id as new_value替换23 as new_value,那么这将是编写update语句的适当方式。

xxls0lw8

xxls0lw82#

使用join更新在oracle中不起作用。你需要一个合并语句-

MERGE INTO orders o
USING (SELECT * FROM status
        WHERE stas_enable = '0') s
ON (o.order_status_id = s.status_id)
WHEN MATCHED THEN
             UPDATE
                SET o.ords_stas_id='23'
              WHERE o.location='DRS';

相关问题