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を想定、確認をおこなってください。
以上です。