我在表中列出了产品,产品。这可能包含超过 500 万条记录。
prod_code prod_region prod_desc prod_type
------------------------------------------------------
1001 R2 r2 asdasa
1001 R1 r1 erfffv
1002 R4 r4 vfdser
1003 R2 r2 sdfdfv
prod_code 和 prod_region 不可为空。
我需要更新此表中的 prod_type,从另一个查找表 product_type 中进行选择。
prod_type prod_code prod_region
-----------------------------------
1 1001
2 1002
2 1003
3 1001 R1
在此表中,prod_region 可以为空。如果它为 null,则应将其解释为任何东西。
所以我更新的产品表应该是,
prod_code prod_region prod_desc prod_type
------------------------------------------------------
1001 R2 r2 asdasa 1
1001 R1 r1 erfffv 3
1002 R4 r4 vfdser 2
1003 R2 r2 sdfdfv 2
所需输出的解释。
- 对于 prod_code = 1001,product_type 中有两个整体。prod_type = 3 用于特定的 prod_region 'R1' 和 prod_type = 1 用于其余区域。因此,products 中的前两条记录应该分别得到 1 和 3。
- 对于 prod_code 1002、1003,product_type 表中没有指定 prod_region。因此,无论 prod_region 是什么,都会为第三和第四条记录分配 prod_type = 2。
由于ORA-30926: unable to get a stable set of rows in the source tables
在 Oracle 或Failure 7547 Target row updated by multiple source rows.
Teradata 中,以下合并语句失败。
merge into products
using product_type
on (products.prod_code = product_type.prod_code
and products.prod_region = coalesce(product_type.prod_region,products.prod_region)
)
when matched then update
set products.prod_type = product_type.prod_type;
寻找标准 SQL 或 Teradata 特定答案。