SQL Server で JOIN を使用してテーブルを更新しますか? 質問する

SQL Server で JOIN を使用してテーブルを更新しますか? 質問する

他のテーブルとの結合を作成してテーブル内の列を更新したい。例:

UPDATE table1 a 
INNER JOIN table2 b ON a.commonfield = b.[common field] 
SET a.CalculatedColumn= b.[Calculated Column]
WHERE 
    b.[common field]= a.commonfield
AND a.BatchNO = '110'

しかし、不満を述べています。

メッセージ 170、レベル 15、状態 1、行 2
行 2: 'a' 付近の構文が正しくありません。

ここで何が問題なのでしょうか?

ベストアンサー1

SQL Server の独自の構文をまだよく理解していません。また、結合して後でフィルターするUPDATE FROM必要がある理由もよくわかりません。次を試してください。CommonField

UPDATE t1
  SET t1.CalculatedColumn = t2.[Calculated Column]
  FROM dbo.Table1 AS t1
  INNER JOIN dbo.Table2 AS t2
  ON t1.CommonField = t2.[Common Field]
  WHERE t1.BatchNo = '110';

常に1つの列の値を別の列の集計に設定しようとするなど(冗長なデータの保存を避けるという原則に違反する)、CTE(共通テーブル式)を使用できます。ここそしてここ詳細については:

;WITH t2 AS
(
  SELECT [key], CalculatedColumn = SUM(some_column)
    FROM dbo.table2
    GROUP BY [key]
)
UPDATE t1
  SET t1.CalculatedColumn = t2.CalculatedColumn
  FROM dbo.table1 AS t1
  INNER JOIN t2
  ON t1.[key] = t2.[key];

これが馬鹿げている理由は、行が変更されるたびに、この更新全体を再実行する必要があるからですtable2。A はSUM実行時に常に計算できるものであり、そうすることで、結果が古くなることを心配する必要がなくなります。

おすすめ記事