Oracle中的合并表以及参考源表的删除条件

时间:2015-06-10 11:59:13

标签: sql database oracle11g sql-merge

对于以下问题,据说答案应该是C.但我认为正确的答案是答案D,因为NOT MATCHED块将所有不匹配的记录插入目标表。任何人都能解释一下吗? 谢谢。

问)查看展览并检查ORDERS_MASTER和MONTHLY_ORDERS表中的数据。

enter image description here

评估以下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

1 个答案:

答案 0 :(得分:1)

正确答案确实是C,这是因为合并操作的来源是monthly_orders表,它只包含两个分别为order_id 2和3的记录。

想想每个记录会发生什么:

  • 对于order_id = 2,因为此ID存在于order_master表中,我们将执行合并语句的MATCHED部分,将order_total更新为2500由于此记录的数量不是NULLDELETE不会做任何事情。
  • 对于order_id = 3,id再次存在于order_master表中,因此我们执行merge语句的MATCHED部分,将order_total更新为{{1然后在NULL上为我们刚刚更新的行发布DELETE,因为order_master上的数量为monthly_order

这给我们留下NULL 1,2和4,它与答案C匹配。

<强>代码

order_id