登 录
//前天碰到一个问题,关于两张表更新的。 //帖子位置:http://topic.csdn.net/u/20110411/20/e18563e0-8d78-4c57-b91a-da7c1219e513.html //当时不知道怎么做,昨天看书,以及昨天晚上看到一位CSDN友友回答了相似的问题。 //才弄明白oracle中merge的使用。 //下面构造一个相似的实例,来看一下oracle中merge的用法 //测试表以及数据 //product_types:产品类型表 select * from product_types; PRODUCT_TYPE_ID NAME --------------------- ---------- 1 Book 2 Video 3 DVD 4 CD 5 Magazine //products:产品信息表 select * from products; PRODUCT_ID PRODUCT_TYPE_ID NAME DESCRIPTION PRICE ---------------- ------------------------ --------------- ------------------------------- ------- 2 1 Chemistry Introduction to Chemistry 30.00 3 2 Supernova A star explodes 25.99 4 2 Tank War Action movie about a future war 13.95 1 1 Modern Science A description of modern science 19.95 //product_changes:产品信息变更表 create table product_changes( product_id integer primary key, product_type_id integer references product_types(product_type_id), name varchar2(50), price number(5,2)) //变更数据 select * from product_changes; PRODUCT_ID PRODUCT_TYPE_ID NAME PRICE ----------------- ------------------------- ------------------------------------ ------- 1 1 Modern Science 40.00 2 1 New Chemistry 35.00 3 1 Supernova 25.99 13 2 Lunar Landing 15.99 14 2 Submarine 15.99 15 2 Airplane 15.99 16 5 Programmer 20.00 //我想要做的是,将product_changes表中的数据跟新到products表中; //1.更新products表中原有的数据,2.如果products表中没有的数据,就添加进去 //下面是具体实现代码: merge into products p using product_changes pc on (p.product_id=pc.product_id) when matched then update set p.product_type_id=pc.product_type_id, p.name=pc.name, p.price=pc.price when not matched then insert (p.product_id,p.product_type_id,p.name,p.price) values (pc.product_id,pc.product_type_id,pc.name,pc.price); //操作完成后,查看一下products表中产品信息, //我们发现,原有的数据部分被更新了,而且新添加了一条原来没有的数据 select product_id,product_type_id,name,price from products; PRODUCT_ID PRODUCT_TYPE_ID NAME PRICE ------------------------ ----------------------------- ------------------- ------- 2 1 New Chemistry 35.00 3 1 Supernova 25.99 4 2 Tank War 13.95 1 1 Modern Science 40.00 13 2 Lunar Landing 15.99 15 2 Airplane 15.99 14 2 Submarine 15.99 16 5 Programmer 20.00 //merge into子句常用于几个关联表更新表,和批量加载数据。
抱歉!评论已关闭.