如何解决下面使用合并查询收到的错误消息



我正在编写一个合并查询,但在运行它时出错。我仔细查看了查询,不明白为什么会出现这个错误。我查看了SQL合并可以采用的不同格式,但仍然没有一种有效。我在SQL Develoer 19.1.0.094版本上运行此查询。

我意识到我可以使用"内部联接";对于这个解决方案,但我不确定如何捕获"When Matched"one_answers"When Not Matched"函数。当不使用Merge函数时,是否有与Match函数等效的函数?我感谢在这个问题上提供的任何帮助。

如果能在这方面提供任何帮助,我将不胜感激。

MERGE into LAB_SALES_Fact fact
USING (select * from lab_stage_good stage)
On
(fact.time_id = stage.time_id AND
fact.cust_id = stage.cust_id AND
fact.promo_id = stage.promo_id AND
fact.channel_id = stage.channel_id)
WHEN MATCHED THEN UPDATE SET
fact.amount_sold = stage.amount_sold
WHEN NOT MATCHED THEN INSERT VALUES
(stage.prod_id, stage.cust_id, stage.time_id, stage.channel_id, stage.promo_id, 
stage.amount_sold)

命令行错误:6列:22
错误报告-
SQL错误:ORA-00904:";阶段"CHANNEL_ID":无效标识符
00904。00000-"%s: 无效标识符">
*原因:
*措施:

表别名stage在子查询之外不可见。移动别名使其可见:

MERGE into LAB_SALES_Fact fact
USING (select * from lab_stage_good) stage
ON (fact.time_id = stage.time_id
AND fact.cust_id = stage.cust_id
AND fact.promo_id = stage.promo_id
AND fact.channel_id = stage.channel_id )
WHEN MATCHED THEN
UPDATE
SET fact.amount_sold = stage.amount_sold
WHEN NOT MATCHED THEN
INSERT (
prod_id,
cust_id,
time_id,
channel_id,
promo_id,
amount_sold
) VALUES (
stage.prod_id,
stage.cust_id,
stage.time_id,
stage.channel_id,
stage.promo_id, 
stage.amount_sold
)

注意:还要命名要插入的列

或者,更简单的是,不使用子查询:

MERGE into LAB_SALES_Fact fact
USING lab_stage_good stage
ON ...

db<gt;小提琴这里

最新更新