【GeneXus】テーブル2個のFor each

For eachでテーブルを2個指定する方法。

環境

GeneXus 16 u2
MySQL

トランザクション

とくにリレーションは作成してません。

For each

Procedure1(SELECT1個になる書き方)

For each t_entry, m_user	Where entry_user_id = user_id	// 結合条件	Where entry_date = &Today	// 通常の検索条件	MSG(user_name)
Endfor
Procedure2(SELECT2個になる書き方)

For each	Where entry_date = &Today	// 通常の検索条件	For each	Where entry_user_id = user_id	// 結合条件	MSG(user_name)	Endfor
Endfor

自動生成されたSQL

Procedure1で作成されるSQL

SELECT T1.`entry_date` , T2.`user_id` , T1.`entry_user_id` , T2.`user_name` , T1.`entry_id`
FROM `t_entry` T1 , `m_user` T2
WHERE (T1.`entry_user_id` = T2.`user_id`) AND (T1.`entry_date` = ? )
ORDER BY T1.`entry_id`
Procedure2で作成されるSQL

SELECT `entry_user_id` , `entry_date` , `entry_id`
FROM `t_entry`
WHERE `entry_date` = ?
ORDER BY `entry_id
SELECT `user_id` , `user_name`
FROM `m_user`
WHERE `user_id` = ?
ORDER BY `user_id

まとめ

SELECTが1個にまとまっていたほうが早い時があるので、使える時には使っていきたいと思います。
まぁリレーション作っていれば
リレーション使って情報取得も可能なんですが、プロジェクトによっては
リレーションがない時もあるので!!!!

注意

環境やバージョンによって出力されるSQLが違うので
必ず出力されるSQLを想定、確認をおこなってください。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください