[Seasar-user:12618] Re: [S2JDBC] 要望:外部結合に任意の絞込み条件を追加
Tsutomu Uchima
[E-MAIL ADDRESS DELETED]
2008年 1月 24日 (木) 10:44:31 JST
うちまです。小林 (koichik)さんレスありがとうございます。
> jdbcManager
> .from(Foo.class)
> .leftOuterJoin("barList")
> .where("bazCode = ? and barList.aCode = ?", 1, 1)
> .getResultList();
>
> のようにしてください.
これだと自動生成されるSQLは
■SQL文1
SELECT
*
FROM
FOO T1_
LEFT OUTER JOIN BAR T2_
ON T2_.foo_id = T1_.id
WHERE
T1_.baz_code = 1 AND T2_.a_code = 1
になりますが、T2_.a_codeがnullの場合に最初に意図していた結果が異なります。改
めて意図したSQLを記述します。
■SQL文2
SELECT
*
FROM
FOO T1_
LEFT OUTER JOIN BAR T2_
ON T2_.foo_id = T1_.id AND T2_.a_code = 1
WHERE
T1_.baz_code = 1
SQL文2はT2_.a_codeがnullでもヒットしますのでSQL文1より意図した結果数は多くな
ります。
もちろんwhere条件で
■Java記述
jdbcManager
.from(Foo.class)
.leftOuterJoin("barList")
.where("bazCode = ? and (barList.aCode = ? or barList.aCode = null)", 1,
1)
.getResultList();
と書けば同じ結果が得られますがケースによっては結果を得る際のパフォーマンスに
影響が出るSQL文になってしまうと思うのです。
LEFT OUTER JOIN句に条件を付け加えたいケースは結構あると思うのですが如何で
しょうか。
再度ご検討していただけませんか?
Seasar-user メーリングリストの案内