我想:
创建一个游标,获取商店中商品的所有当前价格。 我通过使用MERGE语句批量收集游标并循环upserting到STORE_INVENTORY表中。 现在我想将STORE_INVENTORY表中不在游标中的PRICE列清空。 第3步怎么办?我已经可以执行第1步和第2步,因为我已经更新或插入了从光标中提取的项目。
以下是一些示例数据:
有三个源表,由外部方更新。我的目标是获取这三个数据源并将其合并到一个单数表中。
SOURCE TABLES
ITEM_TYPES
DESC_ID | TYPE
A | Kitchen
B | Bath
ITEM_MANIFEST
LOC_ID | ORIGIN
U | USA
C | CHINA
ITEM_PRICE
ITEM_ID | PRICE | DESC_ID | LOC_ID | DATE
0 | 3.99 | A | U | 9/11/2015
1 | 2.99 | B | C | 9/11/2015
2 | 1.99 | A | U | 9/05/2015
目的地表
STORE_INVENTORY
ITEM_ID | TYPE | ORIGIN | PRICE
0 | Kitchen | CHINA | 3.99
8 | Bath | USA | 2.99
因此,在执行以日期作为参数的SQL过程之后。如果它在给定日期之后,它将仅从ITEM_PRICE拉出。
如果执行传入日期为9/10/2015的程序
预期产出
STORE_INVENTORY
0 | Kitchen | USA | 3.99
1 | Bath | China | 2.99
8 | Bath | USA | NULL
答案 0 :(得分:0)
即。类似的东西。
select ITEM_ID, TYPE, ORIGIN
/* not selecting PRICE in the main join */
,(select PRICE from ITEM_PRICE where your join conditions
and DATE >= your param)
from ITEM_TYPES, ITEM_MANIFEST, ITEM_PRICE
where your join conditions, but no criteria on DATE
抱歉,如果您提供了现有查询,则会更清晰,更容易打字。
从重新阅读你的问题,我不确定你是否只插入2行但想要获得3.或者如果你有3行,但你想要将缺少的价格弄清楚。
如果目标表已经有3行,那么,不是采用基于CURSOR的方法(在高容量时可能会很慢而且编写起来很繁琐),为什么不用DATE作为标准来进行UPDATE呢?如果没有匹配,NULL将被分配给价格,这是UPDATE的工作方式。
UPDATE STORE_INVENTORY set PRICE
= (select PRICE from ITEM_PRICE where your join conditions
and DATE >= your param)