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 子查詢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM