UPDATE文で副問い合わせで取得した値を複数列に設定する方法zukucode主にWEB関連の情報を技術メモとして発信しています。UPDATE文で副問い合わせで取得した値を複数列に設定する方法UPDATE文で、副問い合わせで取得した値を複数列に設定する方法を紹介します。SETで指定する列を()で囲い、副問い合わせのSQLで()で囲った列に対応するようにSELECTで取得します。--A.COL1のように更新対象のテーブルAの値も使用可能)注意点SELECTした結果がそのまま更新値となるので、SELECTした結果は必ず1行になる必要があります。(複数行取得してしまうとどの行の値を更新値とすればいいのかわからないので)複数取得されるかどうかは実際にSQLを実行してみないとわからないので、テスト環境のデータでは再現しなかったが、本番のデータでエラーになってしまうということが考えられます。キー項目を条件に指定したり、取得結果が1件になる保証がある条件を指定する必要があります。WITH句で同じSQLを1つのSQLに共通化する同じようなSQLはWITH句を使用して共通化すればパフォーマンスが改善されることが多いです。WITH句を使用すれば1つの副問い合わせをいろいろな場所で使いまわすことができます。重複しているレコードを一括でUPDATEするある列の値が同じレコードが複数ある場合に、そのレコードを全てUPDATEする方法を紹介します。テーブルと列(カラム)にコメントを設定する方法SQLでテーブルと列(カラム)にコメントを設定する方法を紹介します。SELECT句での副問合せの基本的な考え方と注意点SELECT句での副問合せをうまく利用すれば、集計単位の異なる値を同時に取得できます。取得した結果に対してもう一度SQLを実行するようなイメージで値を取得できます。SELECT句でテーブルから指定した列のデータを取得するSELECT句はFROM句で指定されたテーブルから、どの列を取得するかを指定するための構文です。別テーブルをSELECTした結果が存在すればその値を使用してUPDATEする方法SELECTした結果がすでに存在していればその値でUPDATEしたい場合があります。上記SQLだと、テーブルBの存在の有無にかかわらず、テーブルAの全てのデータが更新されてしまいます。INTOのあとのVALUESの代わりに、SELECT文をそのまま使用します。SELECTで取得する列の順番と、INSERTするテーブルの列の順番が一致するようにします。rowspanを使用してテーブル表示するときに必要な情報を分析関数で取得するSQLではなくプログラム側で表示するときに複雑な処理を実装してしまいがちですが、SQLでrowspanに必要な情報を一緒に取得しておけばプログラム側での実装はかなりシンプルになります。ある列の値が最大もしくは最小の値のレコードを取得する例えば以下のテーブルがあるとき、身長が一番大きい社員のレコードを取得したい場合があります。業務でもよくありがちな仕様ですが、一見簡単そうで難しい問題です。BYの処理でROLLUPを使用します。合計行や小計行を含めて以下のような取得をしたい場合があります。システム日付をYYYYMMDD形式などの文字列型に変換する当ホームページに記載されている会社名・製品名・システム名などは、各社の登録商標、もしくは商標です。