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