【发布时间】:2016-08-30 03:45:35
【问题描述】:
我有两张表和一张嵌套表:
1.存储有关产品的数据,包括以下列:
ITEM - product id(key)
STORE - store id(key)
PRICE
NORMAL_PRICE
DISCOUNTS - nested table with info about discounts include columns:
PromotionId(key)
PromotionDescription
PromotionEndDate
MinQty
DiscountedPrice
DiscountedPricePerMida
2- 带有新折扣的临时表包括列:
PROMOTIONID(key)
PRODUCTID(key)
PROMOTIONDESCRIPTION
PROMOTIONENDDATE
MINQTY
DISCOUNTEDPRICE
DISCOUNTEDPRICEPERMIDA
我需要做的是将表 2 合并到表 1 - 如果没有匹配插入则忽略 (当匹配为:表 1 和表 2 中的产品 id 匹配并且此产品子表 PROMOTIONID 匹配表 2 中的 PROMOTIONID)
到目前为止,这是我在嵌套部分遇到困难的地方 - ON 子句和 Insert 子句
MERGE INTO PRICES P
USING(SELECT * FROM TMP_PROMO)T
ON(P.ITEM=T.PRODUCTID AND P.STORE=50 AND P.DISCOUNTS.PROMOTIONID=T.PROMOTIONID)
WHEN NOT MATCHED THEN INSERT (P.DISCOUNTS)
VALUES(T.PROMOTIONID,
T.PROMOTIONDESCRIPTION,
T.PROMOTIONENDDATE,
T.MINQTY,
T.DISCOUNTEDPRICE,
T.DISCOUNTEDPRICEPERMIDA);
我知道这是错误的,但我找不到任何地方该怎么做
示例: 价格表:
row1(1,50,...,nested_table[(11,...),(12,...)])
row2(2,50,...,nested_table[(10,...),(12,...)])
新的促销表:
(15,1,...)
(11,1,...)
id 为 15 的新促销将添加到第 1 行和第 2 行
不会添加 id 为 11 的促销
请帮忙, 谢谢
【问题讨论】:
-
只需使用如下查询取消嵌套表:
SELECT ITEM, x.* FROM table1 t1, TABLE( t1.DISCOUNTS ) x并将其用作 MERGE 语句中的子查询,就像任何其他普通查询一样。
标签: sql oracle oracle12c nested-table sql-merge