先决条件 – MERGE 语句
SQL 中的 MERGE 语句,如前一篇文章中所讨论的,是三个 INSERT、DELETE 和 UPDATE 语句的组合。所以如果有一个Source表和一个Target表要合并,那么在MERGE语句的帮助下,这三个操作(INSERT、UPDATE、DELETE)可以同时执行。
一个简单的例子将阐明 MERGE 语句的使用。
例子:
假设有两个表:
- PRODUCT_LIST该表包含可用产品的当前详细信息,字段 P_ID、P_NAME 和 P_PRICE 对应于每个产品的 ID、名称和价格。
- UPDATED_LIST该表包含可用产品的新详细信息,字段 P_ID、P_NAME 和 P_PRICE 对应于每个产品的 ID、名称和价格。
任务是根据 UPDATED_LIST 更新 PRODUCT_LIST 中产品的详细信息。
解决方案
现在为了更好地解释这个例子,让我们把这个例子分成几个步骤。
- 步骤 1:识别 TARGET 和 SOURCE 表
因此,在此示例中,由于要求根据 UPDATED_LIST 更新 PRODUCT_LIST 中的产品,因此 PRODUCT_LIST 将充当 TARGET,UPDATED_LIST 将充当 SOURCE 表。 - 第 2 步:识别要执行的操作。
现在可以看出 TARGET 和 SOURCE 表之间存在三个不匹配,它们是:- TARGET 中的 COFFEE 成本为 15.00,而 SOURCE 中的成本为 25.00
PRODUCT_LIST 102 COFFEE 15.00 UPDATED_LIST 102 COFFEE 25.00
- SOURCE 中没有 BISCUIT 产品,但它在 TARGET 中
PRODUCT_LIST 103 BISCUIT 20.00
- TARGET 中没有 CHIPS 产品,但 SOURCE 中有
UPDATED_LIST 104 CHIPS 22.00
因此,根据上述差异,需要在TARGET中进行三个操作。他们是:
- UDPATE 操作
102 COFFEE 25.00
- 删除操作
103 BISCUIT 20.00
- 插入操作
104 CHIPS 22.00
- TARGET 中的 COFFEE 成本为 15.00,而 SOURCE 中的成本为 25.00
- 第 3 步:编写 SQL 查询。
Note: Refer this post for the syntax of MERGE statement.
在MERGE 语句的帮助下执行上述操作的 SQL 查询是:
/* Selecting the Target and the Source */ MERGE PRODUCT_LIST AS TARGET USING UPDATE_LIST AS SOURCE /* 1. Performing the UPDATE operation */ /* If the P_ID is same, check for change in P_NAME or P_PRICE */ ON (TARGET.P_ID = SOURCE.P_ID) WHEN MATCHED AND TARGET.P_NAME <> SOURCE.P_NAME OR TARGET.P_PRICE <> SOURCE.P_PRICE /* Update the records in TARGET */ THEN UPDATE SET TARGET.P_NAME = SOURCE.P_NAME, TARGET.P_PRICE = SOURCE.P_PRICE /* 2. Performing the INSERT operation */ /* When no records are matched with TARGET table Then insert the records in the target table */ WHEN NOT MATCHED BY TARGET THEN INSERT (P_ID, P_NAME, P_PRICE) VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE) /* 3. Performing the DELETE operation */ /* When no records are matched with SOURCE table Then delete the records from the target table */ WHEN NOT MATCHED BY SOURCE THEN DELETE /* END OF MERGE */
输出:
PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00 102 COFFEE 25.00 104 CHIPS 22.00
因此,通过这种方式,我们可以在 MERGE 语句的帮助下在 SQL 中执行所有这三个主要语句。
注意:在 MERGE 语法中可以使用除目标和源之外的任何名称。它们仅用于为您提供更好的解释。