一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 多表關聯同時更新多條不同的記錄方法分享

多表關聯同時更新多條不同的記錄方法分享

2019-12-10 14:42MSSQL教程網 Sql Server

因為項目要求實現一次性同時更新多條不同的記錄的需求,和同事討論了一個比較不錯的方案,這里供大家參考下

以下為測試例子。 
1.首先創建兩張臨時表并錄入測試數據: 

復制代碼代碼如下:


create table #temptest1 

id int, 
name1 varchar(50), 
age int 

create table #temptest2 

id int, 
name1 varchar(50), 
age int 

 

查詢出此時的表數據為:

#temptest1                 #temptest2

多表關聯同時更新多條不同的記錄方法分享    多表關聯同時更新多條不同的記錄方法分享

 

2.現在要將#temptest2中的年齡更新到相應的#temptest1中的年齡。

其實就是讓[表1]中ID為1的年齡改成19,同時ID為2的年齡改成20。

當然這里的要求是只用一句SQL,不能用循環

結果如下:

多表關聯同時更新多條不同的記錄方法分享

 

實現方法如下:

Update t1 

Set t1 .age = t2.age

From  #temptest1 t1

Join #temptest2 t2

On  t1.id = t2.id

 

(補充)Sql Server 2008 Merge命令寫法:

merge into #temptest1 t1 
using(select age,id from #temptest2) t2
on t1.id = t2.id
when matched then
update set t1.age = t2.age

 

是不是挺有趣的Sql。

如何一次性更新多條不同值的記錄
標題可能沒說清楚,假設有這樣兩張表: 

復制代碼代碼如下:


create table testA( 
id number, 
eng varchar2(3), 
chi varchar2(3) 

create table testB( 
id number, 
eng varchar2(3), 
chi varchar2(3), 
anythingother varchar2(1) 


現有記錄 
testA: 
ID ENG CHI 
=============== 
1 a 一 
2 b 二 
3 c 三 
testB: 
ID ENG CHI ANY.... 
================= 
1 d 四 
2 e 五 
3 f 六 
我想把testB中的記錄的ENG,CHI字段更新到testA中去,以ID來對應。 

CODE: 

SQL> set autot on 
SQL> update ta set ta.b=(select tb.b from tb where ta.a=tb.a) where exists (select 1 from tb where ta.a=tb.a); 
已更新4行。 
已用時間: 00: 00: 00.01 
執行計劃 
---------------------------------------------------------- 
Plan hash value: 1137212925 
-------------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
-------------------------------------------------------------------------------- 
| 0 | UPDATE STATEMENT | | 5 | 165 | 20 (30)| 00:00:01 | 
| 1 | UPDATE | TA | | | | | 
|* 2 | HASH JOIN SEMI | | 5 | 165 | 5 (20)| 00:00:01 | 
| 3 | TABLE ACCESS FULL | TA | 5 | 100 | 2 (0)| 00:00:01 | 
| 4 | VIEW | VW_SQ_1 | 4 | 52 | 2 (0)| 00:00:01 | 
| 5 | TABLE ACCESS FULL| TB | 4 | 52 | 2 (0)| 00:00:01 | 
|* 6 | TABLE ACCESS FULL | TB | 1 | 26 | 2 (0)| 00:00:01 | 
-------------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
2 - access("TA"."A"="ITEM_1") 
6 - filter("TB"."A"=:B1) 
Note 
----- 
- dynamic sampling used for this statement (level=2) 
統計信息 
---------------------------------------------------------- 
0 recursive calls 
4 db block gets 
23 consistent gets 
0 physical reads 
1004 redo size 
840 bytes sent via SQL*Net to client 
856 bytes received via SQL*Net from client 
3 SQL*Net roundtrips to/from client 
1 sorts (memory) 
0 sorts (disk) 
4 rows processed 
SQL> update ta set ta.b=(select tb.b from tb where ta.a=tb.a) where ta.a= (select tb.a from tb where ta.a=tb.a); 
已更新4行。 
已用時間: 00: 00: 00.00 
執行計劃 
---------------------------------------------------------- 
Plan hash value: 3571861550 
---------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
---------------------------------------------------------------------------- 
| 0 | UPDATE STATEMENT | | 1 | 20 | 7 (15)| 00:00:01 | 
| 1 | UPDATE | TA | | | | | 
|* 2 | FILTER | | | | | | 
| 3 | TABLE ACCESS FULL| TA | 5 | 100 | 2 (0)| 00:00:01 | 
|* 4 | TABLE ACCESS FULL| TB | 1 | 13 | 2 (0)| 00:00:01 | 
|* 5 | TABLE ACCESS FULL | TB | 1 | 26 | 2 (0)| 00:00:01 | 
---------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
2 - filter("TA"."A"= (SELECT "TB"."A" FROM "TB" "TB" WHERE 
"TB"."A"=:B1)) 
4 - filter("TB"."A"=:B1) 
5 - filter("TB"."A"=:B1) 
Note 
----- 
- dynamic sampling used for this statement (level=2) 
統計信息 
---------------------------------------------------------- 
11 recursive calls 
1 db block gets 
53 consistent gets 
0 physical reads 
588 redo size 
840 bytes sent via SQL*Net to client 
858 bytes received via SQL*Net from client 
3 SQL*Net roundtrips to/from client 
1 sorts (memory) 
0 sorts (disk) 
4 rows processed 



如果 create unique index tb_a_uidx on tb(a); 

[Copy to clipboard] [ - ] 

CODE: 

SQL> update (select ta.b tab1 ,tb.b tbb from ta,tb where ta.a=tb.a) set tab1=tbb; 
已更新4行。 
已用時間: 00: 00: 00.01 
執行計劃 
---------------------------------------------------------- 
Plan hash value: 1761655026 
---------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 
---------------------------------------------------------------------------- 
| 0 | UPDATE STATEMENT | | 4 | 184 | 5 (20)| 00:00:01 | 
| 1 | UPDATE | TA | | | | | 
|* 2 | HASH JOIN | | 4 | 184 | 5 (20)| 00:00:01 | 
| 3 | TABLE ACCESS FULL| TB | 4 | 104 | 2 (0)| 00:00:01 | 
| 4 | TABLE ACCESS FULL| TA | 5 | 100 | 2 (0)| 00:00:01 | 
---------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
2 - access("TA"."A"="TB"."A") 
Note 
----- 
- dynamic sampling used for this statement (level=2) 
統計信息 
---------------------------------------------------------- 
8 recursive calls 
4 db block gets 
17 consistent gets 
0 physical reads 
1004 redo size 
840 bytes sent via SQL*Net to client 
827 bytes received via SQL*Net from client 
3 SQL*Net roundtrips to/from client 
3 sorts (memory) 
0 sorts (disk) 
4 rows processed

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www.四虎在线 | 被教官揉了一晚上的奶小说 | 法国贵妇一级伦理hd | 99久久精品无码一区二区毛片 | 久久re这里精品在线视频7 | a级情欲片在线观看hd | 好吊色永久免费视频大全 | 91桃色污| 校花小雪灌满了男人们的浓浆 | 青春草在线观看视频 | 美女私人影院 | 男人最爱看的网站 | 久久电影午夜 | 欧美专区在线视频 | 日韩日b视频 | 国产小视频在线播放 | 欧美亚洲高清日韩成人 | 欧美乱强 | 成人福利网站 | 国产精品对白刺激久久久 | 黑帮少爷爱上我第8集在线观看 | 久久婷婷五月综合色丁香花 | 亚洲六月丁香婷婷综合 | 免费一级特黄特色大片在线观看 | 欧美黑人成人免费全部 | 呜呜别塞了啊抽插 | 美女跪式抽搐gif动态图 | 日本69视频在线观看 | 四虎网站网址 | 国内精品福利丝袜视频_速 国内精品91久久久久 | 我和子伦系列小说 | 臀控福利大臀的网站 | 国产精品第2页 | 小sao货ji巴cao死你视频 | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 爱情岛论坛亚洲一号路线 | 婷婷综合七月激情啪啪 | 波多野结衣伦理在线观看 | 高h文恩好大好爽 | 国产a一级毛片爽爽影院 | 门房秦大爷小说 |