时间:2021-05-23
以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的
今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2。其中a2和b2是关联的,想把A中的字段a1更新成B中的b1
理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误。而且确实还有些小小细节没有注意到。
首先上测试数据
表1,ZZ_TEST1
表2,ZZ_TEST2
要把表一的text更新成表二的text1值,对应的sql如下:
update ZZ_TEST1 t1 set t1."text" = ( select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id") WHERE EXISTS( SELECT 1 FROM ZZ_TEST2 t2 where T2."pid"=t1."id")后面的where条件表示一个限制条件,只更新那些符合条件的数据,也可以写成
update ZZ_TEST1 t1 set t1."text" = ( select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id")where t1."id" in (select "pid" from ZZ_TEST2 )另外还有一种merge的写法,对应的sql如下:
merge into ZZ_TEST1 t1 using ZZ_TEST2 t2 on (t1."id" =t2."pid") when matched then update set t1."text"=t2."text1"为了避免T2中有多条数据对应T1中的数据,可以把sql改成如下的方式:
MERGE INTO ZZ_TEST1 t1 USING ( SELECT * FROM ZZ_TEST2 X WHERE X. ROWID = (SELECT MAX(Y.ROWID) FROM ZZ_TEST2 Y WHERE X."id" = Y."id" ) ) t2 ON (t1."id" = t2."pid") WHEN MATCHED THENUPDATE SET t1."text" = t2."text1"还有一种update from 的语法,经过测试在oracle和mysql中不适用
总结一下,项目中尝尝需要把一张表的字段更新到另一张表中的某一个字段。可以使用update语法,并要做好限定。会使用merge的语法,另外还有一种merge的语法也可以,update from 不能再oracle和mysql中使用。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、无法动态更新数据的实例1.如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多”fromdjango.dbimportmodelsclassCla
分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。1:数据同步增加:如有两张表——A表和B表,创建触发器使当A表插入数据后B表也
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用leftjoin时,on和where条件的区别如下:1、
首先我们需要先建立好数据库,将一些数据插入进去需要两张表:province:省份表city:城市表如图:然后再在java中建立相关的实体类与之对应再然后,我们就
简单的评论回复删除功能,具体内容如下一、数据库建立两张表,一是pinglun表;二是huifu表效果如下:代码如下:1.主页面main.php无标题文档朋友圈内