1、 Merge语句:
语法:merge into table_name , rename_table_name
Using (qurery_sql语句) 查询结果rename
On (条件: )
When matchedthen
Update_sq;
When notmatched then
Insert_sql
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
具体用法:
网上案例:
MERGE INTO PRODUCTS P
USING NEWPRODUCTS NP
ON (P.PRODUCT_ID = NP.PRODUCT_ID)
WHEN MATCHED THEN
UPDATE
SET P.PRODUCT_NAME = NP.PRODUCT_NAME,
P.CATEGORY = NP.CATEGORY
WHERE P.CATEGORY = 'DVD'
---(这里后面可以添加delete)
--- Delete where 条件:
WHEN NOT MATCHED THEN
INSERT
(PRODUCT_ID
,PRODUCT_NAME
,CATEGORY)
VALUES
(NP.PRODUCT_ID
,NP.PRODUCT_NAME
,NP.CATEGORY) WHERE NP.CATEGORY != 'BOOKS';
SELECT * FROM PRODUCTS;
SELECT * FROM NEWPRODUCTS
说明:表products 与表newproducts 通过相同的主键 id 相互联合。
如果:满足on 后面的条件,则更新,否则将插入记录。
也就是:如果记录中有了记录就更新,否则添加记录。
更新记录和添加记录时也可以添加条件用来选择性的添加或更新。所以可以带入各自的where。
在update后面可以增加delete where 条件:用于删除满足条件的记录。 Delete只能用于update后面,不能用于 insert 后面。
个人学习看法:可能是用于批量修改,或者在旧的的功能上升级新的东西。不管怎么样都只是修改products 表中的记录,不会对 newproducts有影响。
对于表newproducts 表,可以用 products的子查询来完成。只要满足要求就行。。。