ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

6.1.4 別の表のデータを追加する

アプリケーションの処理によっては、ある表から取り出したデータを、別の表に追加したいことがあります。この場合に、単一行SELECT文あるいはカーソルを使用してデータを取り出してから追加していたのでは効率がよくありません。INSERT文では、ある表のデータを別の表に追加することができます。追加するデータを表から取り出すには、問合せ指定を使用します。指定例を以下に示します。

1

在庫表から製品名が“テレビ”の行を取り出し、それを第二在庫表という名前の表に追加します。

INSERT INTO  在庫管理.第二在庫表 (COL1, COL2, COL3, COL4)

       SELECT 製品番号, 製品名, 在庫数量, 倉庫番号
                          (1)
      FROM 在庫管理.在庫表 WHERE 製品名 = N'テレビ' 
                            (1)

(1) 問合せ指定

図6.5 問合せ指定によるデータの追加(列の構成が対応している場合)

備考. 在庫表のデータに変化はありません。


例1では、データを追加する表と、データを取り出す表の間で、列の構成は1対1に対応していました。一般的には、両方の表の間で列の構成がこのように対応しているとは限りません。ある表の一部の列のデータを別の表に追加したり、データを追加する表の特定の列には、あらかじめアプリケーションで決めた値を追加したい場合もあります。次に、このような例を示します。

ここで、表名がCDプレーヤー管理表という表があるとします。この表は、CDプレーヤーとCDの在庫数量と発注数量を蓄積するのに使用します。この表は、製品番号、種別、数量、および区分の4つの列で構成されます。種別には、CDプレーヤーは“D”、CDは“T”が設定されます。また、数量には在庫および発注の数量、区分には、在庫は“1”、1つの取引先への発注は“2”、複数の取引先への発注は“3”が設定されます。

2

CDプレーヤー管理表に、在庫表の製品番号および在庫数量を追加します。また、種別はCDプレーヤーを示す“D”とし、区分は、在庫を示す“1”がホスト変数“PART”に設定されているとします。

INSERT INTO 在庫管理.CDプレーヤー管理表(製品番号, 種別, 数量, 区分)

      SELECT 製品番号, 'D', 在庫数量, :PART

        FROM 在庫管理.在庫表 WHERE 製品名 = N'CDプレーヤー'

図6.6 問合せ指定によるデータの追加(列の構成が対応していない場合)

備考.在庫表のデータに変化はありません。

問合せ指定では、表から特定の値を取り出すほかに、複数の表を関連づけて操作したり、表をグループ化して値を集計することができます。その例を以下に示します。詳細については、“第9章 いろいろなデータ操作の方法”および“9.1 表をグループ化してデータを操作する”で説明しています。“図6.7 複雑な問合せ指定によるデータの追加”では内容は気にせず、問合せ指定を使用したイメージを見てください。


3

CDプレーヤー管理表に、発注表の取引製品および取引製品ごとの発注数量の合計を追加します。追加するデータは、複数の取引先に発注しているものだけとします。また、種別はCDプレーヤーを示す“D”とし、区分は、複数の取引先への発注を示す“3”がホスト変数“PART”に設定されているとします。

INSERT INTO 在庫管理.CDプレーヤー管理表(製品番号, 種別, 数量, 区分)

      SELECT 取引製品, 'D', SUM(発注数量), :PART

FROM 在庫管理.発注表, 在庫管理.在庫表

WHERE 取引製品 = 製品番号 AND 製品名 = N'CDプレーヤー' GROUP BY 取引製品

HAVING COUNT(取引先) >= 2

図6.7 複雑な問合せ指定によるデータの追加

備考.発注表および在庫表のデータに変化はありません。