天天看點

oracle裡update+where,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 updateB b2 set(AGB,SEX)3 =(select AGB,SEX fromA a4 where a.ID=b.ID and COMPUTER=‘applet‘)5 where exists

6 (select 1 fromA a7 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)字段。

原文:https://www.cnblogs.com/JOKER2255/p/14582541.html