1. 程式人生 > >14、SQL Server:sql update set from 的用法 (轉)

14、SQL Server:sql update set from 的用法 (轉)

本文來自:http://www.cnblogs.com/zhang9418hn/archive/2012/03/21/2409551.html

下面是這樣一個例子:

 兩個表a、b,想使b中的memo欄位值等於a表中對應id的name值   
  表a:id, name   
            1       王   
            2       李   
            3       張   
  表b:id,ClientName   
            1         
            2   
            3   
(MS SQL Server)語句:update   b  set   ClientName   =   a.name   from   a,b   where   a.id   =   b.id  

(Oralce)語句:update   b  set   (ClientName)   =  (SELECT name FROM a WHERE b.id = a.id)

update set from 語句格式

當where和set都需要關聯一個表進行查詢時,整個update執行時,就需要對被關聯的表進行兩次掃描,顯然效率比較低。
對於這種情況,Sybase和SQL SERVER的解決辦法是使用UPDATE...SET...FROM...WHERE...的語法,實際上就是從源表獲取更新資料。

在 SQL 中,表連線(left join、right join、inner join 等)常常用於 select 語句,其實在 SQL 語法中,這些連線也是可以用於 update 和 delete 語句的,在這些語句中使用 join 還常常得到事半功倍的效果。

Update T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

用來同步兩個表的資料!

Oralce和DB2都支援的語法:

UPDATE A  SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)

MS SQL Server不支援這樣的語法,相對應的寫法為:
UPDATE A  SET A1 = B1, A2 = B2, A3 

= B3  FROM A LEFTJOIN B ON A.ID = B.ID

個人感覺MS SQL Server的Update語法功能更為強大。MS SQL SERVER的寫法:
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

在Oracle和DB2中的寫法就比較麻煩了,如下:

UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)


相關推薦

MS SQL SERVER 中merge join合併連線介紹

1概述Merge join 合併連線。兩個集合進行merge join,需要有一個等值的條件,然後需要兩個已排序好的集合。2 one-to-many與many-to-many 2.1 One-to-many 當參與merge join的兩個集合中,其中一個集合在等值條件上是

關於matlab中get和set用法

通用函式get和set 所有物件都有屬性來定義它們的特徵,正是通過設定這些屬性來修正圖形顯示的方式。儘管許多屬性所有的物件都有,但與每一種物件型別(比如座標軸,線,曲面)相關的屬性列表都是獨一無二的。物件屬性可包括諸如物件的位置、顏色、型別、父物件、子物件及其它內容。每一個不同物件都有和它相關的屬性,可以改

14SQL Serversql update set from用法

本文來自:http://www.cnblogs.com/zhang9418hn/archive/2012/03/21/2409551.html 下面是這樣一個例子:  兩個表a、b,想使b中的memo欄位值等於a表中對應id的name值      表a:id, nam

2SQL ServerSQL利用Case When Then多條件判斷SQL 語句

第一種:select  ID,(case when 條件一  and 條件二  then 0  when 條件三  and  條件四  then  1 else 2 end) as  count,name  from  tablename

12SQL ServerSQL的四種連線-左外連線右外連線內連線全連線

聯接條件可在FROM或WHERE子句中指定,建議在FROM子句中指定聯接條件。WHERE和HAVING子句也可以包含搜尋條件,以進一步篩選聯接條件所選的行。     聯接可分為以下幾類:     1、內聯接(典型的聯接運算,使用像 =  或 <> 之類的比較運算子)。包括相等聯接和自然聯接。 

SQL Server 2005中的分區表添加一個分區

eat 查詢 sch 另一個 rom 原創 查看 copyto art 所謂天下大事,分久必合,合久必分,對於分區表而言也一樣。前面我們介紹過如何刪除(合並)分區表中的一個分區,下面我們介紹一下如何為分區表添加一個分區。 為分區表添加一個分區,這種情況是時常會

SQL Server 2005中的分區表將普通表轉換成分區表

成了 insert 刪掉 -- pri light part ide 新建 在設計數據庫時,經常沒有考慮到表分區的問題,往往在數據表承重的負擔越來越重時,才會考慮到分區方式,這時,就涉及到如何將普通表轉換成分區表的問題了。 那麽,如何將一個普通表轉換成一個分區表 呢

SQL Server 2005中的分區表什麽是分區表?為什麽要用分區表?如何創建分區表?

ima 查詢條件 出錯 數據的操作 之間 方便 如何 oar 意思 如果你的數據庫中某一個表中的數據滿足以下幾個條件,那麽你就要考慮創建分區表了。 1、數據庫中某個表中的數據很多。很多是什麽概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者

SQL Server 運行計劃操作符具體解釋2——串聯(Concatenation )

-s 而且 article font order close 格式 聚集索引 content 本文接上文:SQL Server 運行計劃操作符具體解釋(1)——斷言(Assert)前言: 依據計劃。本文開始講述另外一個操作符串聯(Concatenation)。讀者能夠依

SQL Server 2017 AlwaysOn AG 自動初始化

layout nag 服務 ocs 建議 engine idt 防火墻 vpd 必備條件文件路徑要求在 SQL Server 2016 中,自動種子設定要求數據和日誌文件路徑在參與可用性組的每個 SQL Server 實例上均相同。 在 SQL Server 2017 中,

SQL Server 2017 AlwaysOn AG 自動初始化

toolbar 副本 輔助 AS repl server 自動 too (六) 在現有可用性組上停止某個輔助副本的自動種子設定在主副本上執行ALTER AVAILABILITY GROUP [<availability_group_name>] MODIFY R

SQL Server 2017 AlwaysOn AG 自動初始化

see 個數 一起 配置 備份 日誌 創建 還原 初始化 技術背景在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性組中的次要副本的唯一方法是使用備份、復制和還原。SQL Server 2016 引入了用於初始化次

SQL Server 2017 AlwaysOn AG 自動初始化

創建快照 版本 int ima img ado 需要 PE 可用性組 SQL Server VDI備份原理分析SQL Server提供了虛擬設備接口(VDI)API,用於幫助獨立的應用程序提供商,支持將SQL Server的備份和恢復操作集成到他們的產品中。這些API設計為

SQL Server 數據庫基礎筆記分享

重復 -- like cheng -s min 字節 同學 color 前言 本文是個人學習SQL Server 數據庫時的以往筆記的整理,內容主要是對數據庫的基本增刪改查的SQL語句操作和約束,視圖,存儲過程,觸發器的基本了解。 註:內容比較基礎,適合入門者對SQL Se

SQL Server 數據庫基礎筆記分享

locate proc etc 默認值 添加 XML mit sql 分頁查詢 前言 本文是個人學習SQL Server 數據庫時的以往筆記的整理,內容主要是對數據庫的基本增刪改查的SQL語句操作和約束,視圖,存儲過程,觸發器的基本了解。 註:內容比較基礎,適合入門者對SQ

《Pro SQL Server Internals, 2nd edition》節選翻譯

第七章 設計和優化索引 聚集索引設計注意事項   在你改變聚集索引鍵的值時,將會發生兩件事。首先,SQL server移動行到聚集索引頁鏈和資料檔案中的不同位置。第二,它更新聚集索引鍵的行編號。這個行編號被儲存,而且被再次更新在非聚集索引裡。就I/O而言,這可能非常昂貴,尤其是在批處理更新的情況下。另外,

SQL Server 查詢效能優化——建立索引原則

 索引是什麼?索引是提高查詢效能的一個重要工具,索引就是把查詢語句所需要的少量資料新增到索引分頁中,這樣訪問資料時只要訪問少數索引的分頁就可以。但是索引對於提高查詢效能也不是萬能的,也不是建立越多的索引就越好。索引建少了,用WHERE子句找資料效率低,不利於查詢資料。索引建多

SQL Server AlwaysON從入門到進階4——分析和部署Windows Server Failover Cluster

可以看到每個節點已經有一個相同的權重或者票數,但是再看動態節點權重(DynamicWeight列)已經重新平衡。節點4已經動態撤銷投票以便確保投票配置按奇數節點投票。提醒:在Windows 2012 R2中,唯一一個關閉動態節點權重功能的方式只有通過PowerShell實現。意味著微軟並不希望你關閉。現在我們

win10安裝SQL Server 2017 遇到的一大堆問題+SSMS【最後用虛擬機器解決】

【注】直接拖到最後就是安裝虛擬機器的注意事項了……前面其實都是白搭…… 剛開始就按照教程安裝 —— SQL server2017安裝教程 - CSDN部落格 https://blog.csdn.net/qq2119459337/article/details/78

SQL Server 在指定資料庫下 建立表操作

在MySQL中,是使用 insert 資料庫名.表名 這樣子操作。 SQL Server是如下 指定資料庫下建立表 use test1 GO create table SC ( sno CHA