首页 > 解决方案 > 使用多个类似条件使用另一个表中的值更新一个巨大的表

问题描述

我有一个表REVERSE,列为

ID ORG_ID FULL_ID DATE_REV
-- ------ ------- --------
X1 11%    NULL
X2 22%    NULL
X3 33%    NULL
X4 44%    NULL
X5 55%    NULL

我有另一个表MASTER,列为

FULL_ORG DATE 
-------- --------
11ABC    20190101
22DEF    20190101
33GHI    20190101
44XYZ    20190101
55MNO    20190101

如何MASTER使用 ORG_ID from找到 FULL_ORG 和相应的 DATE 值,并相应地REVERSE更新 FULL_ID 字段和 DATE_REV 字段。

请帮忙..

结果应如下所示。

TXN ORG_TXN FULL_ORG DATE
--- ------- -------- --------
  1 11%     11ABC    20190101
  2 22%     22DEF    20190101
  3 33%     33GHI    20190101
  4 44%     44XYZ    20190101
  5 55%     55MNO    20190101

标签: oracleupdates

解决方案


这是您可能会考虑的一种选择:

SQL> with
  2  rev (id, org_id) as
  3    (select 'X1', '11%' from dual union all
  4     select 'X2', '22%' from dual union all
  5     select 'X3', '33%' from dual union all
  6     select 'X4', '44%' from dual union all
  7     select 'X5', '55%' from dual
  8    ),
  9  mas (full_org, c_date) as
 10    (select '11ABC', 20190101 from dual union all
 11     select '22DEF', 20190101 from dual union all
 12     select '33GHI', 20190101 from dual union all
 13     select '44XYZ', 20190101 from dual union all
 14     select '55MNO', 20190101 from dual
 15    )
 16  select regexp_substr(r.id, '\d+$') txn,
 17         r.org_id,
 18         m.full_org,
 19         m.c_date
 20  from rev r join mas m on regexp_substr(r.org_id, '^\d+') = regexp_substr(m.full_org, '^\d+');

TXN      ORG FULL_     C_DATE
-------- --- ----- ----------
1        11% 11ABC   20190101
2        22% 22DEF   20190101
3        33% 33GHI   20190101
4        44% 44XYZ   20190101
5        55% 55MNO   20190101

SQL>

推荐阅读