網站首頁 編程語言 正文
Oracle沒有update from語法,可以通過四種寫法實現同樣的功能:
一、標準update語法(常用、速度可能最慢)
當更新的表示單個或者被更新的字段不需要關聯表帶過來,此法是最好的選擇。
update a
set a.c2= (select b.c2from b where a.c1=b.c1)
where exists (select 1 from b where a.c1=b.c1)
二、內聯視圖更新(關聯主鍵字段,速度較快)
inline view更新法就是更新一個臨時建立的視圖。
方案:更新一個臨時建立的視圖。要求B表的主鍵字段必須在where條件中,并且是以=號來關聯被更新表。
update (select a.c2 as ac2,b.c2 as bc2 from a, b where a.c1=b.c1 and a.c3='2011') as M
set ac2=bc2
三、merge更新法 (關聯字段非主鍵時,速度較快)
merge是oracle特有的語句,語法如下:
MERGE INTO table_name alias1 --主表,即需要被修改的表
USING (table | view | sub_query) alias2 --從表,即來源表
ON (join condition) --連接條件
WHEN MATCHED THEN --在匹配的記錄中進行
UPDATE table_name SET col1 = col_val1, col2 = col2_val --更改主表信息
WHEN NOT MATCHED THEN --在不匹配的情況下,篩選從表記錄插入到主表【可選】
INSERT (column_list) VALUES (column_values);
原理分析:在alias2中Select出來的數據,每一條都跟alias1進行 ON (join condition)的比較,如果匹配,就對alias1表進行更新的操作(Update),如果不匹配,就對alias1表進行插入操作(Insert)。
執行merge不會返回影響的行數,最多只能兩個表關聯。
merge into a
using b
on (a.c1=b.c1 and a.c3='2011')
when matched then
update a.c2=b.c2
四、快速游標更新法(復雜邏輯時,效率很高)
語法:
begin
for cr in (查詢語句) loop --循環
update table_name set ... --更新語句(根據查詢出來的結果集合)
end loop; --結束循環
end;
begin
for cur in (select a.rowid ,b.c2 from a, b where a.c1=b.c1 and a.c3='2011' ) loop
UPDATE a set c2=cur.c2 where rowid=cur.rowid;
end loop;
end;
原文鏈接:https://www.cnblogs.com/springsnow/p/9399281.html
相關推薦
- 2023-04-19 nginx: [error] CreateFile() “D:\nginx-1.21.6/logs/
- 2022-10-26 C#?form-data上傳圖片流到遠程服務器的詳細代碼_C#教程
- 2023-02-10 Docker?跨主機容器間相互訪問的實現_docker
- 2022-04-19 賭你會懵的C語言指針進階數組場景解析_C 語言
- 2022-07-27 C++中this指針理解及作用_C 語言
- 2023-03-23 Pandas時間數據處理詳細教程_python
- 2022-09-16 Python利用LyScript插件實現批量打開關閉進程_python
- 2022-05-02 Numpy中創建數組的9種方式小結_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支