Tips

2つのテーブルのフィールドを統合して取り出す方法

日付2012/08/16
ID12-002
バージョンv13, v12
プラットフォームWin, Mac

2つの似通ったテーブルがあり、そのテーブルからデータを取り出す時に、それぞれ同じ意味合いのフィールドを統合して取り出したい事があるかもしれません。そのようなとき、SQLで比較的簡単にフィールドを統合して取り出すことができます。

例えば、上図のTable_1とTable_2には、それぞれ同じNameフィールドとAgeフィールドがあります。このフィールドを統合し、さらにNameの昇順でデータを並び替えて取得したいような時には、次のようなコードで取得することができます。

Begin SQL

SELECT CONCATENATE(Table_1.Name,Table_2.Name) AS Name_All , (Table_1.Age+Table_2.Age) AS Age_All
FROM Table_1
FULL OUTER JOIN Table_2
ON Table_1.Name = Table_2.Name
ORDER BY 1
INTO :aListBox

End SQL

このコードは、リストボックスに取り出す目的で作られていますので、INTO句でリストボックスに割り付けた変数が指定されています。

注目して頂きたいのは、SELECTコマンドで取り出すフィールドが、関数または式を使って1つのカラムに統合されています。さらにAS句によって、このカラムに命名しています。このようにSQLでは、式で得られた結果をカラムとして得ることができます。

この式で得られたカラムを並び替える事も可能です。ORDER BY句に指定した1という値は、1番目のカラムを使って並び替えることを意味しています。この例において2を指定すれば、年齢で並び替えることになります。

もちろんSQL EXECUTEを使って取得することもできますので、ご紹介しておきます。

C_TEXT($sql)
$sql:=\
"SELECT CONCATENATE(Table_1.Name,Table_2.Name) , (Table_1.Age+Table_2.Age) "+\
"FROM Table_1 "+\
"FULL OUTER JOIN Table_2 "+\
"ON Table_1.Name=Table_2.Name "+\
"ORDER BY 1"

C_TEXT($name)
C_LONGINT($age)

SQL LOGIN(SQL_INTERNAL;"Designer";"")  //ローカルのSQLサーバに接続
SQL EXECUTE($sql;$name;$age)
While (Not(SQL End selection))
SQL LOAD RECORD  //呼び出す度に変数の値が更新
//ここにレコード毎に行う処理を記述
End while 
SQL LOGOUT

この例では、ローカルのSQLサーバにSQL LOGINで接続していますが、SQLサーバを公開していなくてもローカルからは、いつでも接続できます。