sql update select(使用select结果进行update)

1.情景展示

  现在有一需求:

  如上图所示,需将指定记录集的指定字段更新成该条记录的对应的字段值,使用一条sql如何实现?

2.原因分析

  要更新的记录及字段:

  将要更新的字段值: 

     

3.oracle

     UPDATE CZ_UNITINFO 
SET ( APPID, APPKEY, CODE_CZ, CRECODE, `X509`, BILLCODE )=(
    SELECT
        T2.APPID,
        T2.APPKEY,
        T2.CODE_CZ,
        T2.CRECODE,
        T2.`X509`,
        T2.BILLCODE 
    FROM
        CZ_UNITINFO T2 
    WHERE
        T2.INVOICINGPARTYNAME =      '平舆县阳城镇中心卫生院'
    ) 
WHERE
    INVOICINGPARTYNAME      LIKE '%尉氏%' ;

4.mysql

  需要使用内连接INNER JOIN才能实现:

  把查询结果放到内联接中,我这里只有单条查询结果,如果是多条查询结果的话,要想实现一一对照进行更新,where条件就需要将t2表和t1表进行关联了;

     UPDATE CZ_UNITINFO2 T1
INNER JOIN (      SELECT APPID, APPKEY, CODE_CZ, CRECODE, `X509`, BILLCODE      FROM CZ_UNITINFO2      WHERE INVOICINGPARTYNAME =      '阿里巴巴' ) T2 
SET T1.APPID = T2.APPID,
T1.APPKEY = T2.APPKEY,
T1.CODE_CZ = T2.CODE_CZ,
T1.CRECODE = T2.CRECODE,
T1.`X509` = T2.`X509`,
T1.BILLCODE = T2.BILLCODE 
WHERE
    T1.INVOICINGPARTYNAME      LIKE '%腾讯%' ;

5.拓展

关于update

我们知道普通的更新语句结构为:

update table_name set column1=value1,column2=value2,...;

但是,当我们使用update table_name set column1=value1 and column2=value2,...时,会发生什么?

虽然不报错,并且可以顺利执行SQL,但是,原有数据并未得到更新。

关于影响行数

对于原有数据进行修改成功后,返回的影响行数才不会为0;

当要更新的数据与现有数据一致时,将不会进行更新(比如:同一条SQL语句执行更新两次)。

  2022年5月24日09:49:20

关于for update

在mysql当中,我们知道:

可以使用for update对查询结果进行修改,进而将修改的数据直接保存到表当中;

但是,当表中没有主键时,是无法使用这种方式,修改表数据的。

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2021-05-21 15:30  Marydon  阅读(8206)  评论(0编辑  收藏  举报