- 1. 概要
- 2. UPDATE
- 3. UPDATE ~ SELECT
- 4. UPDATE 他のテーブルの複数条件
1. 概要
「UPDATE」は、既存のレコードを更新するためのコマンドです。
2. UPDATE
「UPDATE」の基本形は
UPDATE
テーブル名
SET
カラム名1 = 値1,
カラム名2 = 値2,
カラム名3 = 値3,
...
WHERE
条件;
3. UPDATE ~ SELECT
「テーブルA」と似た構成の「テーブルB」が存在していて、双方に同じ型の「カラムC」「カラムD」が存在するとします。
「テーブルA」の「カラムC」に「テーブルA」「テーブルB」の「カラムD」が一致する「テーブルB」の「カラムC」の値で更新したいとき。
UPDATE
テーブルA
SET
カラムB =
(SELECT
カラムB
FROM
テーブルC
WHERE
テーブルC.カラムD = テーブルA.カラムD
);
「IBM DB2」以外ではやってみてませんが、とりあえず「IBM DB2」ではうまくいきました。
複数行カラムも設定できます。
UPDATE
テーブルA
SET
(カラムB, カラムC =
(SELECT
カラムB, カラムC
FROM
テーブルC
WHERE
テーブルC.カラムE = テーブルA.カラムE
);
てな感じ。
別に、テーブル同士が関連づいてなくても、一定の条件をつけたり(あるいは、条件をつけなくでも)可能。
UPDATE
テーブルA
SET
(カラムB, カラムC =
(SELECT
カラムB, カラムC
FROM
テーブルC
WHERE
テーブルC.カラムE = 値E
)
WHERE
テーブルA.カラムF = 値F;
と。
この場合、末尾の「テーブルA.」の修飾は、なくても機能します。
4. UPDATE 他のテーブルの複数条件
前項までの更新は、「SELECT」の結果を更新の値にいれるものでしたが・・・。
テーブルAが
日時
番号
フラグ
テーブルBが
日時
番号
氏名
のようなものがあるとして、テーブルBを日時、番号で選択した結果によって、テーブルAのフラグを更新するとすれば、下記の「SQL」で更新できます。
UPDATE
テーブルA
SET
フラグ = なんかの値
WHERE
(日時, 番号)
IN
(
SELECT
日時
,番号
FROM
テーブルB
WHERE
テーブルBを選択する条件
);
これは、「IBM DB2」で検証しましたが、複雑な「SQL」ではないので、おそらくは、他のデータベースでも使えると思います。
上記の例は、単一のテーブルからの選択で条件を絞っていますが、複数のテーブルからの選択結果であっても
(項目, ...) IN
(
SELECT
選択結果項目, ...
FROM
テーブル, ...
WHERE
条件, ...
)
の形式で、「IN」の前後の項目数が一致するように、しておけば、応用できます。
|