2014-01-06 201 views
0

我被表面上看起來很容易的Update語句所困惑。我需要使用Table2中的值更新Table1中4列的值,這是基於每個表中匹配兩個單獨的列。這裏是一般語法:SQL更新語句正在更新

Update Table1 
set field1 = [table2 field1] 
, field2 = [table2 field2] 
, field3 = [table2 field3] 
, field4 = [table2 field4] 
--select * 
from Table2 p inner join Table1 c 
on p.matchfield1 = c.matchfield1 and p.matchfield2 = c.matchfield2 
where c.database_id = 1 --qualifier since join clause may not provide unique result set 
and p.matchfield1 = 123456 --to test the statement on a single record first 

當我作爲select語句運行子句時,我得到一個單一的記錄按預期。但是,當我使用相同的'from'語言運行更新子句時,我發現查詢使用Table2中的值更新了Table1中的每一行,其中matchfield1 = 123456.

我想知道是否需要進一步澄清我where條款基於matchfield2值(在我的示例中是eamil地址)進行限定,所以我將添加到語句末尾'和p.matchfield2 ='[email protected]''。

我懷疑我是一個非常小的調整,而不是做這項工作,但同時這讓我瘋狂。感謝您的任何建議!

+1

你使用了哪個數據庫? –

+0

我正在使用SQL Server 2008.對不起,我沒有添加到最初的帖子。 – user3167010

回答

0

而不是做一個JOIN上同桌的,試試這個(假設你正在使用SQL Server)...

UPDATE Table1 
    set field1 = [table2 field1] 
    , field2 = [table2 field2] 
    , field3 = [table2 field3] 
    , field4 = [table2 field4] 
FROM Table2 p   
WHERE database_id = 1 
    AND p.matchfield1 = 123456 
    AND p.matchfield1 = matchfield1 AND p.matchfield2 = matchfield2 

你也可以修改您的查詢收緊過濾,加入AND c.matchfield1 = matchfield1 AND c.matchfield2 = matchfield2到WHERE條款。

+0

感謝您的反饋。這非常有幫助。我假設我必須在table1和table2之間建立連接,然後才能將database_id = 1添加到where子句。我能夠得到這個工作!再次感謝! – user3167010

+0

@ user3167010您嘗試更新的表格的工作方式與Table1類似,因此'FROM'可以包含其他表格。 – user2989408