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

8.4 同一表を関連づけて操作する

表のそれぞれの行について、特定の列とほかの列の値を比較したり、演算する方法はすでに説明しました。一方、1つの表の特定の行とほかの行で値を比較したり、演算することはできません。そこで、表の関連づけを利用して、1つの表をあたかも異なる表のようにして扱うことにより、これらの操作を行う方法を説明します。

そのためには、FROM句に同じ表名を指定します。そして、SQL文中でそれらの表を区別するための相関名を必ず指定します。

異なる行間での比較

1つの表の特定の行とほかの行で値を比較する例を以下に示します。

1

在庫表から、製品名が同じである製品番号の対を求めます。取り出す列は、対になるそれぞれの製品番号とその製品名とします。この操作を行うために、FROM句に在庫表を2つ指定して、同じ列が2列ずつある表を導き出します。これらの同じ列を区別するために、一方にはT1、他方にはT2という相関名を付けます。

SELECT T1.製品番号, T2.製品番号, T1.製品名

       FROM 在庫管理.在庫表 AS T1,  在庫管理.在庫表 AS T2

       WHERE T1.製品名 = T2.製品名 AND T1.製品番号 < T2.製品番号

図8.5 同じ表同士を関連づけて操作する例

異なる行間での演算

1つの表の特定の行とほかの行の値で演算を行う例を以下に示します。

2

在庫表で、1つ違いの製品番号を持つ製品の間で、在庫数量の差を求めます。なお、取り出すデータは、両方の製品番号、製品番号が大きい方の製品名、在庫数量の差とします。

SELECT T2.製品番号, T1.製品番号, T2.製品名, T2.在庫数量 - T1.在庫数量  AS 在庫数量差  

       FROM 在庫管理.在庫表 AS T1, 在庫管理.在庫表 AS T2

       WHERE T2.製品番号 = T1.製品番号 + 1

図8.6 異なる行の間で演算を行う例