SGTMS

做事情
我们是认真的
您的位置:SGTMS>速记>Update语句用法

Update语句用法

正文

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并不会)

本文最后更新于2022-6-1,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Update语句用法》
文章链接: https://www.sgtms.com/shorthand/92.html
本站资源仅供个人学习交流,转载或者引用本文内容请注明来源及作者,不允许用于商业用途。
分享到:

相关推荐

网友评论抢沙发

路人甲 表情
Ctrl+Enter快速提交