Oracle 数据库,将数据从 1 个表更新到另一个表

时间:2020-12-22 06:03:26

标签: sql sql-update oracle12c

我在 oracle 12c 数据库中有 2 个表,我想从 1 个表更新到下一个。

表 1(标志模板等):
et.emblemtemplate_id, et.customer_id, et.code

表 2(产品列表客户):
plpc.productlistpercustomer_id、plpc.customer_id、plpc.emblemtemplate_id、

我想做什么:

  1. 检查所有 plpc.productlistpercustomer 是否填充了 plpc.emblemtemplate_id,如果没有则需要更新。
  2. plpc.emblemtemplate_id 需要更新为 et.emblemtemplate_id,其中 et.code = "999991"
  3. 表必须在 CUSTOMER_ID 上联接

我创建了一个选择:

select plpc.customer_id,
  plpc.productlistpercustomer_id,
  plpc.emblemtemplate_id,
  et.customer_id,
  et.emblemtemplate_id,
  et.code
  from productlistpercustomer plpc
  inner join emblemtemplate et
  on et.customer_id = plpc.customer_id
  where et.code = '999991'

有人能帮我把它翻译成 sql 更新脚本吗?

谢谢!

Visual of what i want to do

2 个答案:

答案 0 :(得分:1)

您可以尝试使用具有相关子查询的更新:

UPDATE
    productlistpercustomer plpc
SET
    emblemtemplate_id = (SELECT et.emblemtemplate_id
                         FROM emblemtemplate et
                         WHERE et.customer_id = plpc.customer_id AND
                               et.code = '999991')
WHERE
    emblemtemplate_id IS NULL;

答案 1 :(得分:0)

merge 怎么样?

MERGE INTO productlistpercustomer p
     USING emblemtemplate e
        ON (e.customer_id = p.customer_id)
WHEN MATCHED
THEN
   UPDATE SET p.emblemtemplate_id = p.emblemtemplate_id
           WHERE     e.code = 999991
                 AND p.emblemtemplate_id IS NULL;
相关问题