创建如下表数据
select * from t1 ;

select * from t2;

现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致。
方式1,update
常见陷阱:
UPDATE T1 SET T1.FMONEY = (select T2.FMONEY from t2 where T2.FNAME = T1.FNAME)
执行后T1结果如下:

有一行原有值,被更新成空值了。
正确写法:
UPDATE T1 SET T1.FMONEY = (select T2.FMONEY from t2 where T2.FNAME = T1.FNAME) WHERE EXISTS(SELECT 1 FROM T2 WHERE T2.FNAME = T1.FNAME);

方式2:内联视图更新
UPDATE ( select t1.fmoney fmoney1,t2.fmoney fmoney2 from t1,t2 where t1.fname = t2.fname )t set fmoney1 =fmoney2;
方式3:merge更新
merge into t1 using (select t2.fname,t2.fmoney from t2) t on (t.fname = t1.fname) when matched then update set t1.fmoney = t.fmoney;
本文探讨了在SQL中如何正确地更新表格数据,尤其是当涉及到两个表格之间的同步更新时。介绍了三种方法:使用UPDATE语句配合EXIST子句、内联视图更新和MERGE语句。特别强调了在不加条件直接更新时可能出现的问题,即当匹配行不存在时,可能导致数据丢失。正确做法是在UPDATE语句中添加EXIST子句,确保只更新存在匹配的行,从而避免错误更新。
1464

被折叠的 条评论
为什么被折叠?



