单个表的联表更新

由于系统对接,友商给的数据比较乱,导致很多数据不是最新数据,所以我负责模块操作会出很多问题,所以我想改变顺序。在我用的表里面是表示顺序的字段如下图:


现在问题是contract_seq为1的不是最新的合同,我要找出最新的合同,并且要把不是最新的合同的contract_seq的值改成最新合同的contract_seq的值,而且我还要把最新合同的contract_seq的值改成1,单条的话处理起来很简单,写个脚本就行了,脚本如下:

update BASIC_CONTRACT_LABOR
set CONTRACT_SEQ = (select CONTRACT_SEQ from BASIC_CONTRACT_LABOR where WHETHER_EFFECTIVE = 'Y'
and USER_CODE = '01900435')
where CONTRACT_SEQ ='1'
and USER_CODE = '01900435';

update BASIC_CONTRACT_LABOR
set CONTRACT_SEQ = '1'
where WHETHER_EFFECTIVE = 'Y'
and USER_CODE = '01900435';
commit;

但是如果多条的话,就需要联表更新了,不过关联的是要更新的表。sql如下(好吧,这条sql不是我写出来的,是问了同事的):

update BASIC_CONTRACT_LABOR a
set a.CONTRACT_SEQ = 
(select CONTRACT_SEQ from BASIC_CONTRACT_LABOR c where WHETHER_EFFECTIVE = 'Y'
and USER_CODE in ('01900436','03138511')  and a.USER_CODE = c.USER_CODE)
where a.CONTRACT_SEQ ='1'
and a.USER_CODE  in ('01900436','03138511')


update BASIC_CONTRACT_LABOR
set CONTRACT_SEQ = '1'
where WHETHER_EFFECTIVE = 'Y'
and USER_CODE = '01900435';
commit;

今天又用到个升级版,emmmm,贴上来,以后用起来方便。sql语句如下:

UPDATE  BASIC_CONTRACT A
    SET A.CONTRACT_SEQ = 
    ( SELECT CONTRACT_SEQ FROM BASIC_CONTRACT B 
        WHERE USER_CODE IN ('03035064','03829791') AND A.USER_CODE = B.USER_CODE 
        AND CONTRACT_CODE = (SELECT MAX(CONTRACT_CODE) FROM BASIC_CONTRACT C WHERE USER_CODE IN ('03035064','03829791') AND B.USER_CODE = C.USER_CODE ))
WHERE A.CONTRACT_SEQ = '1'
AND A.USER_CODE IN ('03035064','03829791');

UPDATE BASIC_CONTRACT A
SET  A.CONTRACT_SEQ = '1'
WHERE A.USER_CODE IN ('03035064','03829791')
AND  A.CONTRACT_CODE = (SELECT MAX(CONTRACT_CODE) FROM BASIC_CONTRACT B WHERE USER_CODE IN ('03035064','03829791') AND B.USER_CODE = A.USER_CODE );
COMMIT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值