2012-04-11 16 views
0

ここでいくつかの問題があります。複数の列の結合を使用するSQL Serverの更新ステートメント

表1:

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

は表2:次のように

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

参加Table2'Y'

と呼ばれる一定の値でTable1に存在する更新するので、文は次のとおりです。

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

このステートメントは、すべての行の更新が終了するだけです.1つのIDだけではなく、他のIDには結合されないようです。私は最終的にあきらめて、2つのideフィールドCID + HIDを連結して、単一の "id"を持つWHERE INサブクエリを実行しました。しかし、私はなぜこれが適切な結合を使って動作しないのか理解したい。

Table1はCTE ..です

+0

これあなたが更新されないように期待されるいくつかの例のデータを追加することができ、動作するはず? – Andomar

+1

それは私のために働く。私はT2のすべての行のT1に一致する行があるので、すべての行を更新すると思います。 – Phil

+0

問題が解決しない場合、T1はCTEです。私はこれが私を夢中にさせない。それは私がちょうどそれを得ることを他の方法で動作します。 – sridawg

答えて

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

の定義を含め、両方の質問を私たちに提示する必要があります。しかし、伝統的な参加理由動作していない私はすでに私はその回避策を介して作業を得たと言った – sridawg

+1

両方の方法は私のためにうまくいく:http://www.sqlfiddle.com/#!3/a98ce/9 – mellamokb

関連する問題