1. TOP
  2. ブログ
  3. 【GeneXus】自己結合を実現する方法

【GeneXus】自己結合を実現する方法

GeneXus開発のナレッジ発信として、今回は「自己結合」の実装方法についてご説明します。

とは言いつつも、結論から先に述べると、GeneXusではいわるゆ自己結合は実現できないため、実際には、自己結合の代わりとなる実装方法をご紹介していきます。

■サンプルテーブル・データ

gx0629_1

gx0629_2

今回、サンプルとして使用するトランザクション(≒ テーブル定義)とデータです。上司の名前を取得する場合に、Staff_IdとChief_Idの自己結合が必要となります。

■SQL

gx0629_3
今回取得する結果と自己結合を使用したクエリです。本当はこれをGeneXusでも実装したいのですが、世の中そう上手くはいきません。GeneXusでは、For Eachを使用してこの自己結合を実現していきます。

■成功例

gx0629_15

gx0629_13

gx0629_14

まずは早速、成功例から。
このようにループをネストして、かつ、内側のループをサブルーチン化することによって、自己結合と同様の結果を得ることができます。
このサブルーチン化が、今回ご紹介したかった一番のポイントです。

次に失敗例をご紹介します。

■失敗例1

gx0629_10

gx0629_12

gx0629_11

SQLの自己結合に近そうな書き方ですが、テーブル別名を指定することができないので、この実装では同じテーブルを結合することはできません。
ナビゲーションビューワーを見ても、テーブルの結合はされていないことがわかります。

■失敗例2

gx0629_17

gx0629_16

gx0629_18

成功例とよく似た実装です。違うところは、内側のループをサブルーチン化していない点です。
たったそれだけの違いですが、ナビゲーションビューワーを確認すると、クエリの生成において、成功例と確かに違いがあることが見て取れます。
For Eachのネストにはなっていないため、意図した結果を得ることができません。

 

以上、GeneXusによる自己結合を実現する方法のご紹介でした。

システム開発において、自己結合を必要とする場面は少なからずあると思いますので、ぜひ参考にしてみて下さい。

 

 

株式会社キャパでは、GeneXusを用いた超高速開発についてご相談を承っています。
短納期、予算が合わないなどお気軽にご相談ください。
高速開発:GeneXusのご紹介

    カテゴリ一覧

    PAGE TOP