2つのテーブルのフィールドを統合して取り出す方法
日付 | 2012/08/16 |
---|---|
ID | 12-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サーバを公開していなくてもローカルからは、いつでも接続できます。