1. ホーム
  2. sql-server

[解決済み] SQL ServerでJOINを使用してテーブルを更新しますか?

2022-03-22 15:11:29

質問

あるテーブルのカラムを、他のテーブルと結合して更新したい。

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'

しかし、それは文句を言っている。

<ブロッククオート

Msg 170, Level 15, State 1, Line 2
2行目 a'付近に不正な構文があります。

どこが悪いのでしょうか?

解決方法は?

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';

もし、あるカラムの値を常に別のカラムの集約値に設定しようとする(冗長なデータの保存を避けるという原則に反する)ような馬鹿げたことをしているなら、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 は、常に実行時に計算することができ、そうすることで、結果が古くなることを心配する必要がないのです。