正文
Update是一个数据库SQL语法,⽤于修改表中的数据,单独使用时使用where匹配字段,否则会更新所有行。
基本语法
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 单列:UPDATE eqptable SET Name = 'boy' WHERE LastName = 'li'; 多列:UPDATE eqptable SET Address = 'shandong', City = 'jinan' WHERE Name = 'boy'; 更新多个列时,只需要使用一条SET命令,每个 “列=值”对之间用逗号分隔,最后一列不用逗号。
扩展
更新一个表的某列数据,此列数据从另一表中可获取到。
小数据量,我以前的做法是导出两个表为excel,做对应匹配然后excel覆盖导入。
Mysql可以使用如下SQL:
update B, A set B.username = A.username, B.phone = A.phone where B.userId = A.userId;
Oracle其实可以使用merge语法实现:
merge into table1 using table2 on (table1.id = table2.id) when matched then update set table1.val = table2.val;
如果表二中存在一对多的重复数据,其实会报错,如:ORA-30926: 无法在源表中获得一组稳定的行。
遇到这种情况要么治理数据,要么参考网上处理的方案:
上述写法在using后面构造了一个新的table2,但一定要对val做出处理,如果是varchar类型,可以选择 max,min等函数,如果number类型,可以使用sum,avg等函数,总之,要对val做出处理(对应多个的时候,到底要哪个?最大的还是最小的),新的table2是一个id对应一个val。
为什么构造新的table2时要加 group by t.id ,因为 select max(t.val) m from table2 t 查询的是一条数据,t.id不属于这条数据的任何字段,故select t.id后报错,拼接group by t.id便可以查出需要的idd字段。(针对oracle数据库,mysql并不会)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Update语句用法》
文章链接: https://www.sgtms.com/shorthand/92.html
本站资源仅供个人学习交流,转载或者引用本文内容请注明来源及作者,不允许用于商业用途。
文章名称:《Update语句用法》
文章链接: https://www.sgtms.com/shorthand/92.html
本站资源仅供个人学习交流,转载或者引用本文内容请注明来源及作者,不允许用于商业用途。
网友评论抢沙发