SQL UPDATE文で副問い合わせで取得した値を複数列に設定する方法
UPDATE
文で、副問い合わせで取得した値を複数列に設定する方法を紹介します。
SET
で指定する列を()
で囲い、副問い合わせのSQL
で()
で囲った列に対応するようにSELECT
で取得します。
UPDATE A
SET (COL1, COL2, COL3) = (
SELECT
B.COL1,
B.COL2,
B.COL3
FROM B
WHERE
--必要に応じて追加
--A.COL1のように更新対象のテーブルAの値も使用可能
)
注意点
SELECT
した結果がそのまま更新値となるので、SELECT
した結果は必ず1行になる必要があります。(複数行取得してしまうとどの行の値を更新値とすればいいのかわからないので)
複数取得されるかどうかは実際にSQL
を実行してみないとわからないので、テスト環境のデータでは再現しなかったが、本番のデータでエラーになってしまうということが考えられます。
必ずキー項目を条件に指定したり、取得結果が1件になる保証がある条件を指定する必要があります。