对于以下问题,据说答案应该是C.但我认为正确的答案是答案D,因为NOT MATCHED块将所有不匹配的记录插入目标表。任何人都能解释一下吗? 谢谢。
问)查看展览并检查ORDERS_MASTER和MONTHLY_ORDERS表中的数据。
评估以下MERGE语句:
MERGE INTO orders_master o
USING monthly_orders m
ON (o.order_id = m.order_id)
WHEN MATCHED THEN
UPDATE SET o.order_total = m.order_total
DELETE WHERE (m.order_total IS NULL)
WHEN NOT MATCHED THEN
INSERT VALUES (m.order_id, m.order_total);
上述陈述的结果是什么?
一个。 ORDERS_MASTER表将包含ORDER_ID 1和2。
B中。 ORDERS_MASTER表将包含ORDER_IDs 1,2和3。
℃。 ORDERS_MASTER表将包含ORDER_IDs 1,2和4。
d。 ORDERS_MASTER表将包含ORDER ID 1,2,3和4。
答案:C
答案 0 :(得分:1)
正确答案确实是C,这是因为合并操作的来源是monthly_orders
表,它只包含两个分别为order_id
2和3的记录。
想想每个记录会发生什么:
order_id = 2
,因为此ID存在于order_master
表中,我们将执行合并语句的MATCHED
部分,将order_total
更新为2500由于此记录的数量不是NULL
,DELETE
不会做任何事情。 order_id = 3
,id再次存在于order_master
表中,因此我们执行merge语句的MATCHED
部分,将order_total
更新为{{1然后在NULL
上为我们刚刚更新的行发布DELETE,因为order_master
上的数量为monthly_order
。这给我们留下NULL
1,2和4,它与答案C匹配。
<强>代码强>
order_id