oracle 多表關聯更新語句

2021-06-22 16:17:35 字數 931 閱讀 5475

在使用資料庫進行更新操作時,我們可能會碰到一種情況,有表a和表b兩張表,需要更新表b中的某個欄位時,需要關聯a b兩表,將a表中的字段值賦值給b,此時執行sql語句如下:

update 表a set a.欄位1 = (select b.欄位1 from 表b where a.欄位2=b.欄位2) where exists

(select 1 from 表b where a.欄位2=b.欄位2) 

update 表a set .欄位1 = (select b.欄位1 from 表b where a.欄位2 = b.欄位2)  where exists (select 1 from 表b where a.欄位2 = b.欄位2) 

但是執行語句時發現報了 ora-01427 單行子查詢返回多個行錯誤 ,觀察sql執行發現是由於a.欄位2 = b欄位2 返回了多條a表中的資料(即對錶b的字段2,為某值的資料在表a中有多條記錄),此時需要先保證返回的b.欄位1 為一條資料 才能執行update語句,可以使用下邊的sql

update 表a set 表a.欄位1 = (select t.欄位1 from (select 表b.欄位2,max(欄位1)cc from 表b group by 欄位2)t where 表a.欄位2 = 表b.欄位2)  where exists(select 1 from 表b where a.欄位2 = b.欄位2)

以下是我使用到的一條sql語句

update hotel_member set hotel_member.cityid = ( select t.citity_id from (select aaa.hotelid ,max(cityid) citity_id from hotel_order aaa group by hotelid)t  where hotel_member.hotelid = t.hotelid) where hotel_member.cityid is null

oracle多表關聯更新

1.首先將其他表的資料抽取到一張臨時表裡面。create table temp dim2 as select t.stdaddr,s.dzbm from demp dim t,dzmlpxz pt s where t.sdaddr s.mc 2.進行分組查詢,看看裡面的記錄是否有重複的。select...

oracle多表關聯更新

oracle的更新語句不通mssql那麼簡單易寫,就算寫出來了,但執行時可能會報 這是由於set 的子查詢查出了多行資料值,oracle規定一對一更新資料,所以提示出錯。要解決這樣必須保證查出來的值一一對應。原理 update語句的原理是先根據where條件查到資料後,如果set中有子查詢,則執行子...

ORACLE 多表關聯 UPDATE 語句

oracle 多表關聯 update 語句 兩表 多表 關聯update 僅在 where 字句中的連線 直接賦值 update customers a 使用別名 set customer type 01 where exists select 1 from tmp cust city b wher...