2012-04-11 97 views
0

在這裏遇到一些麻煩。在多列上使用連接的SQL Server更新語句

表1:

CID, Name, HID 
(001-233, Test1, 12345) 

表2:

CID, Name, HID, Primary 
(001-233, Test1, 12345, '') 

想要更新Table2其中加入與Table1存在一個名爲恆定值'Y'

所以語句如下:

UPDATE T2 SET T2.Primary = 'Y' 
FROM T2 
INNER JOIN T1 
    ON (T1.CID = T2.CID 
     AND T1.HID = T2.HID) 

此聲明只是更新所有行,就像它只在一個id上進行連接而不在另一個上進行連接?我終於放棄了,並通過連接兩個ide字段CID + HID做了一個帶有單個「id」的子查詢。但我想明白爲什麼這沒有使用正確的連接工作。

Table1是CTE ..

+0

這應該工作,您可以加入,你會期望不被更新了一些示例數據? – Andomar 2012-04-11 17:03:01

+1

這對我很有用。我想它會更新所有行,因爲T1中的每一行都有匹配的行。 – Phil 2012-04-11 17:08:03

+0

不工作,T1是CTE。我沒有得到它,這讓我瘋狂。它工作的另一種方式,我只是沒有得到它。 – sridawg 2012-04-11 17:09:59

回答

0
update t2 
set (t2.primary) = (select 'Y' from t1 where T1.CID = T2.CID AND T1.HID = T2.HID) 
+0

的定義謝謝,但是我想知道爲什麼傳統的join不工作,我已經說過我通過該解決方法工作 – sridawg 2012-04-11 17:20:18

+1

這兩種方法都適用於我:http://www.sqlfiddle.com/#!3/a98ce/9 – mellamokb 2012-04-11 17:25:17