2013-03-18 74 views
8

我是使用Microsoft SQL Server Management Studio的SQL新手。加入兩個表後的SQL更新

我想寫一個SQL語句,在兩個表連接後執行更新。

我有兩個表:myTable1myTable2。兩者共享一個字段MyID,這將成爲我加入的領域。 myTable1包含一個名爲BitToUpdate的列。 MyTable2包含一個名爲BitToCheck的列。

我想將BitToUpdate設置爲myTable1爲1,其中BitToCheckmyTable2也爲1。

以下是我有:

SELECT M.MyID, BitToUpdate, BitToCheck 
INTO #temp_table 
FROM myTable1 as T1 
LEFT JOIN myTable2 as T2 
ON M.MyId = PO.MyId 

所以首先我想加入這兩個表上其ID myTable1myTable2,並將結果存儲在一個臨時表。

接下來,我想更新BitToUpdate是1,其中BitToCheck爲1

所以,我們要做的是,在臨時表,我有:

UPDATE #temp_table 
SET 
    `BitToUpdate` = 1 
WHERE 
    `BitToCheck` = 1 

這#temp_table成功更新BitToUpdate 。但是,當我在myTable1上進行選擇時,我發現BitToUpdate未更改。我想這是有道理的,因爲#temp_table不是一個真正的「指針」......

但是,接近這個連接和更新的正確方法是什麼?

回答

13

你並不需要在這裏使用LEFT JOIN,因爲你是在一個條件從表2檢查,這樣的INNER JOIN應在這裏更好。

UPDATE T1 
SET T1.BitToUpdate = 1 
FROM myTable1 T1 
INNER JOIN myTable2 T2 
    ON T1.MyId = T2.MyId 
WHERE T2.BitToCheck = 1 
+0

這是錯誤的,請參閱本 http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query 順序是:更新 - >聯接 - >設置 – Hendyanto 2015-11-18 04:30:11

+0

如果有人關心:上面的查詢沒有錯。在MS SQL中,您可以執行UPDATE - > JOIN - > SET或UPDATE - > SET - > FROM - > JOIN ...甚至UPDATE - > SET - > FROM - > WHERE .. 。 – 2017-10-20 13:53:06

4

您在第一個查詢中正在做的是更新名爲#temp的臨時表。更新永遠不會去實際的表myTable1mayTable2。要更新記錄,而與其他表加入試試這個:

UPDATE T1 
SET T1.BitToUpdate = 1 
FROM myTable1 as T1 
LEFT JOIN myTable2 as T2 (ON T1.MyId = T2.MyId) 
WHERE T2.BitToCheck = 1 
+0

+1的解釋 – Lamak 2013-03-18 16:20:13

1
--SELECT M.MyID, BitToUpdate, BitToCheck 
--INTO #temp_table 
update t1 
    set t1.BitToUpdate = 1 
FROM myTable1 as T1 
LEFT JOIN myTable2 as T2 
ON t1.MyId = t2.MyId 
where t2.bittocheck = 1 
0
UPDATE T1 
SET BitToUpdate=1 
FROM myTable1 T1 
LEFT JOIN myTable2 T2 
ON T1.MyId=T2.MyId 
WHERE T2.BitToCheck=1