Oracle SQL,结合更新或合并与联接,使用 2 个维度 tables 将代理键插入事实 table

Oracle SQL, Combine Update or Merge with Join, Insert Surrogate Keys into Fact table using 2 dimensions tables

我已经填充了维度表(Oracle SQL Dev。)下一步我创建了 facts table(F_Orders),我装数量,价格,Order_ID的surrogate keys 进入 facts table.

我想插入具有特定 record 的最新 Surrogate_ID(客户、位置等)。SA_ORDERS 中,我可以看到哪个 Order_ID 与哪个 Customer_ID 相连。在 D_CUSTOMERS 中使用 Customer_ID 我可以找到 Surrogate key.

为了执行这个任务,我使用了这个查询:

INSERT INTO F_Orders 
(order_id
,quanity
,price
,cust_s_key)
       
SELECT
sa_order_items.order_id
,sa_order_items.quantity
,sa_order_items.unit_price
,d_customers.s_key
FROM
sa_order_items
JOIN sa_orders ON sa_order_items.order_id = sa_orders.order_id
JOIN d_customers ONd_customers.customer_id=sa_orders.customer_id
WHERE 
d_customers."Latest" = 'Y'
AND d_customers.flag = 'I'

现在我想知道,我可以为 Surrogate key (cust_s_key) 执行 update,因为我有 2 个 joints 可以使用吗? 不幸的是,我无法将 updatejoin 成功组合。我如何将两者结合起来,或者可能会找到另一种方法来做到这一点?非常感谢。 PS。我知道在 ETL 我们不会经常需要此更新。

我们可以使用相同的查询

更新事实table
UPDATE F_Orders fo SET fo.cust_s_key = (SELECT
distinct d_customers.s_key
FROM
sa_order_items
JOIN sa_orders ON sa_order_items.order_id = sa_orders.order_id
JOIN d_customers ONd_customers.customer_id=sa_orders.customer_id
WHERE 
d_customers."Latest" = 'Y'
AND d_customers.flag = 'I'
AND sa_order_items.order_id = fo.order_id)
WHERE EXISTS (SELECT 1 FROM
sa_order_items
JOIN sa_orders ON sa_order_items.order_id = sa_orders.order_id
JOIN d_customers ONd_customers.customer_id=sa_orders.customer_id
WHERE 
d_customers."Latest" = 'Y'
AND d_customers.flag = 'I'
AND sa_order_items.order_id = fo.order_id)