Oracle 关联表更新 update ,where exists
表A
ID | NAME | AGE | SEX | BOOK |
1 | 小丑1 | 12 | 男 | 数据结构 |
2 | 小丑2 | 22 | 女 | 人工智能 |
表B
ID | AGE | SEX | COMPUTER |
1 | 00 | applet | |
2 | 00 | thinkpad |
根据表A更新表B中的AGB 和SEX
SQL:
1 update B b 2 set (AGB,SEX) 3 =(select AGB,SEX from A a 4 where a.ID=b.ID and COMPUTER='applet') 5 where exists 6 (select 1 from A a 7 where a.ID=b.ID and COMPUTER='applet') and NAME like '小丑%‘ ;
说明:
工作中涉及到了这种需求(关联表更新),所谓关联表更新就是在更新一张数据库表时,需要另外一张表的数据。那么怎样把数据库表中数据更新到另外一张上呢?
这就涉及到了数据表关联。要想把两张表关联到一起就需要找到这两张表的相同属性。就像一对情侣,两个人称得上是情侣,那肯定有很多共同点,甚至连性别都是一样的(开个玩笑)。
下面说明一下这条sql 语句的意思,首先update 是更新,据我目前看来update 后面只许放一张表,也就是说update 只能更新一张表。这是重点,我之前还想着同时更新两张表,这是不可能的。
set 就没必要解释了,set 后面括号里可以加入任意个数据库字段。where a.ID=b.ID 这是这句sql 语句的核心,用A表中的ID 与B表中的ID进行关联。同时被关联表A 也可以加入自己的where 条件。3至4行的整体意思是从被关联表A中查找AGB,SEX字段更新到表B中。
where exists 要细致的说明一下:
(select 1 from A a where a.ID=b.ID and COMPUTER='applet')
where exists 后面必须加括号 ,这句sql 语句的意思是 筛选出 符合a.ID=b.ID and COMPUTER='applet' 的所有A中的字段值。A中ID 也可关联B中别的属性,这是不受限制的。
有时候不希望把B 中所有符合a.ID=b.ID and COMPUTER='applet' 条件的(AGB,SEX)全部更新,你也可以在后面加上B表的属性条件。比如上述的 Name like '小丑%’。
这句sql 的整体意思是符合在A中ID 等于B中ID 并且 COMOUTER等于‘applet'的AGB,SEX更新到符合 B表中 NAME 前两个字节为小丑的(AGB,SEX)字段。
另外 where exists 另一作用是 增加程序的运行效率。where exists 是个标记函数,他只返回两个值,是或者不是,是为1,不是为0,。当返回为0时,就直接结束sql ,不会再运行上边的select 子查询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了