web-dev-qa-db-ja.com

自己結合によるステートメントの更新

テーブルの1つの行から別の行に情報をコピーする必要がありました。私は次のことができることに気づきました:

update address
set col1 = a2.col1,
col2 = a2.col2,
.....etc
from address a1, address a2
where a1.id = @to and a2.id = @from

ただし、上記のSQLはあいまいなようです。
行@toが@fromのデータで更新され、逆の行は更新されないことをどのようにして知ることができますか?

編集:注:私は広範なテストを行っていませんが、このクエリは開発データベースに対して試したところ、機能しているようです。これは、@ from行の結果で1つの@to行を更新するだけです。

3
user606723

あいまいさを少なくするために、set句にエイリアスを追加できます。 (コメントの孔夫子から、回答を提出しなかった人から引用)

update address
set a1.col1 = a2.col1,
a1.col2 = a2.col2,
.....etc
from address a1, address a2
where a1.id = @to and a2.id = @from
1
user606723