【GeneXus】自己結合を実現する方法
GeneXus開発のナレッジ発信として、今回は「自己結合」の実装方法についてご説明します。
とは言いつつも、結論から先に述べると、GeneXusではいわるゆ自己結合は実現できないため、実際には、自己結合の代わりとなる実装方法をご紹介していきます。
■サンプルテーブル・データ
今回、サンプルとして使用するトランザクション(≒ テーブル定義)とデータです。上司の名前を取得する場合に、Staff_IdとChief_Idの自己結合が必要となります。
■SQL
今回取得する結果と自己結合を使用したクエリです。本当はこれをGeneXusでも実装したいのですが、世の中そう上手くはいきません。GeneXusでは、For Eachを使用してこの自己結合を実現していきます。
■成功例
まずは早速、成功例から。
このようにループをネストして、かつ、内側のループをサブルーチン化することによって、自己結合と同様の結果を得ることができます。
このサブルーチン化が、今回ご紹介したかった一番のポイントです。
次に失敗例をご紹介します。
■失敗例1
SQLの自己結合に近そうな書き方ですが、テーブル別名を指定することができないので、この実装では同じテーブルを結合することはできません。
ナビゲーションビューワーを見ても、テーブルの結合はされていないことがわかります。
■失敗例2
成功例とよく似た実装です。違うところは、内側のループをサブルーチン化していない点です。
たったそれだけの違いですが、ナビゲーションビューワーを確認すると、クエリの生成において、成功例と確かに違いがあることが見て取れます。
For Eachのネストにはなっていないため、意図した結果を得ることができません。
以上、GeneXusによる自己結合を実現する方法のご紹介でした。
システム開発において、自己結合を必要とする場面は少なからずあると思いますので、ぜひ参考にしてみて下さい。
株式会社キャパでは、GeneXusを用いた超高速開発についてご相談を承っています。
短納期、予算が合わないなどお気軽にご相談ください。
高速開発:GeneXusのご紹介