[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 メーリングリストの案内