web-dev-qa-db-ja.com

SQL Server 2005、2008の複数のテーブルのデータに基づいて単一のテーブルを更新する

テーブルoneのデータを使用して、テーブルtwoを更新する必要があります。表1と表2は、共通の列によって関連付けられていません。テーブルthreeはテーブルtwoに関連しています。

例:テーブル1(reg_detテーブル)

reg_det_id | reg_id | results
101        | 11     | 344

表2:(一時テーブル)

venue                    | results
Anheim convention center | 355

表3(regmaster-tbl)

reg_id| venue
11    | Anaheim convention center

表2のデータを使用して、表1の結果列を更新する必要があります。しかし、表1と表2は関連していません。上記の表2と3、および表1と3は関連しています。誰でもアイデアを提案してください!表1の結果の値は355である必要があり、このデータは表2からのものですが、これら2つは無関係であり、表3を使用して関連付けることができます。混乱する場合は申し訳ありません!

11
user1984533

かなり簡単です:

UPDATE T1
SET result = t2.results
FROM [table one] T1
INNER JOIN [table three] t3
 on t1.reg_id = t3.reg_id
INNER JOIN [table two] T2
 on t2.venue = t3.venue
13
MBulava

答えではなく、ほぼ質問。 :)

暗黙の内部結合を使用できませんでしたか?

UPDATE rd
   SET rd.results = tt.results
  FROM reg_det rd, regmaster rm, temptable tt
 WHERE rm.reg_id = rd.reg_id
   AND rm.venue = tt.venue;

読みやすく、この構文はSELECTステートメントで機能し、明示的な内部結合と同じ意味を持ちます。

5
Jesse Chisholm

これを試して:

UPDATE rd
SET rd.results = t.results
FROM reg_det rd
JOIN regmaster rm ON rm.reg_id = rd.reg_id
JOIN temptable t ON t.venue = rm.venue
WHERE t.results = 355

そうしないと、regmasterとtemptableに一致するすべてのreg_detレコードが更新されるため、WHERE句を追加しました。

1
criticalfix