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
可以使用吗?
不幸的是,我无法将 update
与 join
成功组合。我如何将两者结合起来,或者可能会找到另一种方法来做到这一点?非常感谢。
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)
我已经填充了维度表(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
可以使用吗?
不幸的是,我无法将 update
与 join
成功组合。我如何将两者结合起来,或者可能会找到另一种方法来做到这一点?非常感谢。
PS。我知道在 ETL
我们不会经常需要此更新。
我们可以使用相同的查询
更新事实tableUPDATE 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)