单个表的联表更新

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


现在问题是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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL中更新单个中的字段可以使用UPDATE语句。语法如下: ``` UPDATE 名称 SET 字段1 = 新值1, 字段2 = 新值2, …… WHERE 查询条件; ``` 例如: ``` UPDATE users SET age = 30 WHERE name = 'John Doe'; ``` 上面的例子将名为'John Doe'的用户的年龄更新为30。 若要更新 A字段为 B字段的值,可以使用如下语句: ``` UPDATE 名称 SET A = B WHERE 查询条件 ``` 例如: ``` UPDATE users SET phone_number = home_phone WHERE id=5; ``` 上面的例子将id为5的用户的phone_number字段更新为home_phone字段的值。 ### 回答2: 使用MySQL中的UPDATE语句可以用来更新单个的数据。要更新A字段等于B字段的数据,可以使用以下语法: UPDATE 名 SET A字段 = B字段 WHERE A字段 = B字段; 例如,假设我们有一个名为“users”的,其中包含“name”和“age”两个字段,我们希望将“age”字段的值设置为与“name”字段相同的值,可以使用如下的UPDATE语句: UPDATE users SET age = name WHERE age = name; 执行以上语句后,“age”字段的值将会与“name”字段的值相等。 需要注意的是,此语法仅适用于希望将某个字段的值更新为与另一个字段相等的情况。如果需要根据其他条件进行更新,可以通过在WHERE子句中添加其他条件来实现。 另外,如果有多个需要更新的字段,可以使用逗号分隔它们,例如: UPDATE 名 SET A字段 = B字段, C字段 = D字段 WHERE A字段 = B字段; 总之,使用UPDATE语句可以轻松地在MySQL中更新单个的数据,其中可以通过设置相应的条件来让A字段等于B字段。 ### 回答3: MySQL中,我们可以使用UPDATE命令对单个进行更新操作。更新某个字段A等于另一个字段B的值,可以通过以下SQL语句实现: UPDATE 名 SET 字段A = 字段B; 这条语句将会把中的每一行数据的字段A的值都更新为该行数据的字段B的值。 例如,假设我们有一个名为"student",包含以下字段: - id (学生ID) - name (学生姓名) - age (学生年龄) - score (学生成绩) 如果我们想将每个学生的年龄更新为该学生的分数,可以使用以下更新语句: UPDATE student SET age = score; 运行以上语句后,每一行数据的age字段都将被更新为该行数据的score字段的值。 需要注意的是,更新操作会对中每一行数据进行修改,因此在执行更新之前,最好先备份数据以防误操作导致数据丢失。 此外,还可以根据需要增加WHERE语句来指定更新的数据行,例如: UPDATE student SET age = score WHERE name = '张三'; 以上语句将只会将姓名为"张三"的学生的年龄更新为该学生的分数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值