2013-10-17 31 views
-3

我們如何用單個sql查詢更新兩個表?我們如何用單個sql查詢更新兩個不同的表?

假設我有兩個表

1. Employee 

empid empname  salary 
00001 Vijay  100000 
00002 Alex  200000 
00003 Jennifer 300000 


2. Institute 

regno State  Country 
123ab Texas   USA 
231nf California  USA 

那麼怎樣才能更新這兩個表可以說我想更新「EMPID」的00001「僱員」表和「國家」字段的「工資」字段研究所表的「regno」123ab。

+5

你不能。 'update'只針對單個表。使用一個事務和兩個單獨的查詢。該交易將有效地將兩個查詢合併爲一個。 –

+0

http://stackoverflow.com/questions/2044467/how-to-update-two-tables-in-one-statement-in-sql-server-2005 – Brian

+0

http://stackoverflow.com/questions/4361774/mysql -update-multiple-tables-with-one-query – Gobo

回答

0

您可以創建一個存儲過程,而更新的員工,然後更新研究所這樣的話你的單號查詢將是:

exec spUpdateEmployeeTableAndInstituteTable 
+0

我們可以做到這一點,而不使用TRANSACTION? –

3
  1. ,如果它的相關數據,你可能可以做一個JOIN
  2. ,如果不是的話,你可能看不1個查詢,但1 transaction
  3. 如果你仍然需要的是1個呼叫,定義過程
+0

感謝您的信息,但我們可以使用其他方式尋找除交易和程序外的解決方案嗎? –

+1

@VijayChauhan現在你應該意識到在單個SQL指令中沒有辦法做到這一點......這就是事務處理的原因 – Barranka

+3

老實說,試圖避免事務或過程,擁有不相關的數據,仍然堅持一個單一的查詢,聞起來很多**,比如在發現安全漏洞後要求提供關於如何執行SQL注入攻擊的指示信息。它可能不是這樣,但至少看不到任何其他方式對需求的使用。 – Wrikken

1
BEGIN TRANSACTION 
query1; 
query2; 
COMMIT 
0

它實際上可以在一個查詢中完成:

UPDATE Employee e, Institute i 
SET e.salary = <new salary>, 
    i.state = <new state> 
WHERE e.empid = '00001' 
AND i.regno = '123ab' 
+0

U hav使用了JOIN操作,但這些表並不相互關聯,所以我們如何在這種情況下進行JOIN操作? –

+0

它只是做了匹配每個條件的行的交叉積。 – Barmar

相關問題