UPDATE¶
ターゲットテーブルの指定された行を新しい値で更新します。
構文¶
必須パラメーター¶
target_table更新するテーブルを指定します。
col_nametarget_tableの列の名前を指定します。テーブル名は含めないでください。たとえば、UPDATE t1 SET t1.col = 1は無効です。valuecol_nameに設定する新しい値を指定します。
オプションのパラメーター¶
FROM additional_tables更新する行の選択または新しい値の設定に使用する1つ以上のテーブルを指定します。ターゲットテーブルを繰り返すと、自己結合が行われることに注意してください。
WHERE condition更新するターゲットテーブルの行を指定する式。
デフォルト:値なし(ターゲットテーブルのすべての行が更新されます)
使用上の注意¶
FROM 句で、テーブル間に JOIN が含まれている場合(例:
t1とt2)、t1のターゲット行は、テーブルt2の複数の行を結合(つまり一致)する場合があります。これが発生すると、ターゲット行は 複数結合行 と呼ばれます。複数結合行を更新する場合、 ERROR_ON_NONDETERMINISTIC_UPDATE セッションパラメーターは更新の結果を制御します。FALSE(デフォルト値)の場合、エラーは返されず、結合行の1つがターゲット行の更新に使用されます。ただし、選択された結合行は非決定的です。IF
TRUE、複数の行を結合するターゲット行の値の例を含むエラーが返されます。
パラメーターを設定するには:
例¶
2つのテーブルを使用して標準の更新を実行します。
非決定的な結果を生成する結合で更新します。
ERROR_ON_NONDETERMINISTIC_UPDATE = FALSEの場合、ステートメントは
srcの次の行のいずれかの値を使用して、targetの単一の行をランダムに更新します。
(0, 11),(0, 12),(0,13)ERROR_ON_NONDETERMINISTIC_UPDATE = TRUE の場合、重複した DML 行
[0, 10]を報告するエラーが返されます。
この非決定的な動作とエラーを回避するには、1対1の結合を使用します。
このステートメントにより、
targetの単一行が(0, 11)(srcのvの最小値を持つ行の値)に更新され、結果がエラーになることはありません。