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)字段。

 

Oracle 关联表更新 update ,where exists

上一篇:oracle 11g的审计功能


下一篇:CF452F Permutation [哈希,树状数组]