Oracle一張表的多個字段更新到另一張表中去

2021-07-05 10:06:05 字數 2745 閱讀 2049

假設表a中有多個字段(province ,city)需要從b表獲取(兩張表的mobile一樣),總結了幾種寫法。

一、update a  set a.province=(select province from b where b.mobile=a.mobile);

update a  set a.city=(select cityfrom b where b.mobile=a.mobile);

這種寫法效率太低,尤其是號碼有上萬條的時候,所以拋棄。

二、update a set a.province=b.province,a.city=b.city from a  inner join b on a.mobile=b.mobile.

或者update a set a.province=b.province,a.city=b.city from a,b where a.mobile=b.mobile.

三、update a inner join b on a.mobile=b.mobile set a.province=b.province,a.city=b.city 

注意:第二種和第三種寫法在oracle行不通的,老是報錯,折騰了好長時間,最後還是用下面的語句解決了問題

四、update a set(a.province,a.city)=(select province,city from b where b.mobile=a.mobile)  

其實第四種方法是第一種方法的合併。

專案中寫的真實例子:

update m_smsphoneno a set (a.operator,a.province,a.city)=(select  owner,state,city from keyaccount.cellphonesort b where substr(a.mobile,1,7)=b.startcode)  where  a.category=2 and a.city is null;   注:用a.city=null不行的

select*  

fromct_con_truckfeemdyentryasoftimestampto_timestamp('2014-12-25 12:00:00', 'yyyy-mm-dd hh24:mi:ss')  

wherecfcontractid='vjaaaacgqkh8twni';  

insertintoct_con_truckfeemdyentry (select*fromct_con_truckfeemdyentry  

asoftimestampto_timestamp('2014-12-25 12:00:00','yyyy-mm-dd hh24:mi:ss')wherecfcontractid='vjaaaacgqkh8twni' ); 

select * from t_zbd_person

delete from t_zbd_person

insert into t_zbd_person

(fid,

fnumber,

fname_l1,

fname_l2,

fname_l3,

fcontrolunitid,

fcreatorid,

fcreatetime,

flastupdateuserid,

flastupdatetime,

fusedstatus,

fidentitycard,

feaspersonid,

fadminorgunitid,

fadnumber)

select newbosid('73a28d5d'),

d.fnumber,

d.fname_l1,

d.fname_l2,

d.fname_l3,

d.fcontrolunitid,

d.fcreatorid,

d.fcreatetime,

d.flastupdateuserid,

d.flastupdatetime,

1,d.fidcardno,

d.fid,

b.fid            ,

u.fadnumber 

from t_org_position a

inner join t_org_baseunit b

on b.fid = a.fadminorgunitid

inner join t_org_positionmember c

on c.fpositionid = a.fid

inner join t_bd_person d

on d.fid = c.fpersonid

left join t_pm_user u

on u.fpersonid = d.fid        

where d.femployeetypeid <> 'ftcmjt3ssri1twufiarb56kehbm='

and b.flongnumber like 'z000001!z000005!z000041%'

and d.fdeletedstatus = 1

oracle中一張表的某個欄位與另一張表關聯

今天在無意間查詢到乙個sql,有兩張表,一張使用者表,使用者表中有個personroles欄位,clob型別,裡面是逗號分隔的角色id a,b,c,d 需要查詢每個人和其現有的角色。問題在於使用者表和角色表的關聯,直接left join用roles.id in user.personroles 查詢...

Oracle將一張表幾個字段賦值到另一張表指定字段

由於某種原因客戶資料庫中 trp advp表部分記錄的projectname和groupname兩個字段值丟失,由於trp reportitem 表中可以找到對應的資料,於是通過該錶進行資料還原.trp advp中一條記錄對應trp reportitem中的多條記錄,因此需要對trp reporti...

如何匯出一張表裡的同字段的多個字段值 遞迴

如何匯出一張表裡的同字段的多個欄位的值呢?我在這裡用到的是遞迴的方法,那麼問題又來了,什麼是遞迴呢?顧名思義,遞迴從字面的理解就是一層一層地傳遞下去,其實也是這樣的,遞迴的定義就是 在函式的定義中使用函式自身的方法。看著這個定義確實難以理解,不過可以理解為迴圈的漸進,在使用遞迴的時候,需要注意的是要...