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

5.1.4 冗長な行を取り除いて取り出す

単一行SELECT文で取り出せるのは一行だけです。単一行SELECT文で探索条件の結果が真になる行が複数存在するとエラーになります。また、探索条件の指定を省略すると、表のすべての行が取り出しの対象になるため、表に2行以上のデータがあるとエラーになります。このように、取り出しの対象になる行が複数ある場合でも、取り出す列のすべてについて、それぞれの行の値が同じ場合には、結果を1行にして取り出すことができます。それには、“DISTINCT”を指定します。指定例を以下に示します。

1

在庫表から、製品番号が“120”未満の製品名と倉庫番号を求めます。これらの値が同じ行は1行として処理します。

SELECT DISTINCT 製品名, 倉庫番号 INTO :PRODUCT, :WHCODE

       FROM 在庫管理.在庫表 WHERE 製品番号 < 120

図5.3 冗長な行を取り除いて取り出す例

DISTINCTは、取り出す行の値が互いに等しいものを1行にするために使用します。DISTINCTの使用方法で誤りやすいのは、取り出す行が複数あってもエラーにならないと誤解した場合です。この例を以下に示します。

2

DISTINCTを誤って使用した例です。在庫表から、製品番号が“120”未満の製品名と在庫数量を求めます。

SELECT DISTINCT 製品名, 在庫数量 INTO :PRODUCT, :STOCKQTY

       FROM 在庫管理.在庫表 WHERE 製品番号 < 120

図5.4 DISTINCTの誤った使用方法