前回の反省を踏まえて、変更を加えました。 まずSQLの文をINTERSECTを使うのではなく、WHEREの中に条件として結合を使うことにしました。 TimelineSelectData.javaの1209行目のif文を以下のように変更しました。
if (minId > 0) { body.append(" AND eip_t_timeline.timeline_id > " + minId); if ("FILE".equals(displayParam)) { body.append(" AND eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id"); } else if ("L".equals(displayParam)) { body.append(" AND eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id"); } }
しかしまたうまくいかなかったので、1209行目のif文の内容を詳しく見てみました。 するとminIdは、直近のTimelineIDをあらわすことがわかりました。 1209行目のif文とは別にif文を作成することにしました。 まず以下の文を作成しました。
if ("FILE".equals(displayParam)) { body .append(" AND eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id"); } else if ("L".equals(displayParam)) { body .append(" AND eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id"); }
これをどこに挿入すればよいかを考えます。 最初に抽出したいため、bodyを初期化している文のすぐ後(1192行目)に挿入します。 しかしこれもまたうまくいきませんでした。 文をいれる場所を変えてみたりしたのですがダメでした。 先輩にアドバイスをいただいたところ、FROMに参照すべきテーブルを書いていないことがわかったため、FROMに加えました。
/** 変更前 **/ body.append(" FROM eip_t_timeline "); /** 変更後 **/ body.append(" FROM eip_t_timeline, eip_t_timeline_file, eip_t_timeline_url ");
また1192行目に追加した文を以下のように変更しました。
if ("FILE".equals(displayParam)) { body .append(" eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id AND"); } else if ("L".equals(displayParam)) { body .append(" eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id AND"); }
しかしこれを実行すると読み込みが遅くなってしまいました。 単体での抽出は可能なのですが、条件分岐させると動作が重くなってしまいました。 この理由を探って改善させていきたいと思います。