--参考: merge into table_a a using table_b b on(a.id=b.id) when matched then update set a.col_1=b.col_1 a.col_2=b.col_2 when not matched then insert (a.col_1,a.col_2) values (b.col_1,b.col_2);
注意:两表的连接条件(比如上面的id列)是不能update的
语句如下,请帮忙看下,多谢各位啦。 MERGE INTO BILL.T_BY_DISCT a USING ( SELECT BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS from wcl.T_by) b ON (a.BY_SEQ = b.BY_SEQ) WHEN MATCHED THEN UPDATE SET a.BY_SEQ=b.BY_SEQ,a.USER_NAME=b.USER_NAME,a.ACCOUNT_ID=b.ACCOUNT_ID,a.SI_EXTERNAL_ID=b.SI_EXTERNAL_ID,a.BY_MIN=b.BY_MIN,a.BY_MAX=b.BY_MAX,a.BY_PRECENT=b.BY_PRECENT,a.BY_TYPE=b.BY_TYPE,a.BY_LEVEL=b.BY_LEVEL, a.STATUS=b.STATUS,a.CREATE_DATE=b.CREATE_DATE,a.END_DATE=b.END_DATE,a.BY_OBJECT_ID=b.BY_OBJECT_ID,a.CREATE_STAFF=b.CREATE_STAFF,a.FEE_NBR=b.FEE_NBR,a.STATUS_CHG_DATE=b.STATUS_CHG_DATE,a.COMMENTS=b.COMMENTS WHEN NOT MATCHED THEN INSERT (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS) VALUES (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS);
--参考:
merge into table_a a
using table_b b
on(a.id=b.id)
when matched then
update
set a.col_1=b.col_1
a.col_2=b.col_2
when not matched then
insert (a.col_1,a.col_2)
values (b.col_1,b.col_2);
MERGE INTO BILL.T_BY_DISCT a
USING (
SELECT BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS from wcl.T_by) b
ON (a.BY_SEQ = b.BY_SEQ)
WHEN MATCHED THEN
UPDATE SET a.BY_SEQ=b.BY_SEQ,a.USER_NAME=b.USER_NAME,a.ACCOUNT_ID=b.ACCOUNT_ID,a.SI_EXTERNAL_ID=b.SI_EXTERNAL_ID,a.BY_MIN=b.BY_MIN,a.BY_MAX=b.BY_MAX,a.BY_PRECENT=b.BY_PRECENT,a.BY_TYPE=b.BY_TYPE,a.BY_LEVEL=b.BY_LEVEL,
a.STATUS=b.STATUS,a.CREATE_DATE=b.CREATE_DATE,a.END_DATE=b.END_DATE,a.BY_OBJECT_ID=b.BY_OBJECT_ID,a.CREATE_STAFF=b.CREATE_STAFF,a.FEE_NBR=b.FEE_NBR,a.STATUS_CHG_DATE=b.STATUS_CHG_DATE,a.COMMENTS=b.COMMENTS
WHEN NOT MATCHED THEN
INSERT (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS)
VALUES (BY_SEQ,USER_NAME,ACCOUNT_ID,SI_EXTERNAL_ID,BY_MIN,BY_MAX,BY_PRECENT,BY_TYPE,BY_LEVEL,STATUS,CREATE_DATE,END_DATE,BY_OBJECT_ID,CREATE_STAFF,FEE_NBR,STATUS_CHG_DATE,COMMENTS);
SET a.BY_SEQ = b.BY_SEQ,
用于连接的字段不能做更新,可以参考:
http://www.idb-stock.net/idb/2011/05/30/147.html
http://www.idb-stock.net/idb/2011/05/30/146.html