概要日付:私は私のHBMファイルにこれらのBeanを持ってSELECT文のOneToMany関係に基づくと
を。第1に、2つの日付(レポートの開始と停止)と除外された期間のリストがあるレポートです。第二は、報告期間を除外したことです。除外された期間にレポートがオフになります。
<class name="com.company.Report" table="TReport">
<property name="startDate" column="m_StartDate" type="timestamp"/>
<property name="endDate" column="m_EndDate" type="timestamp"/>
<list name="excludedPeriods" table="TExcludedPeriod" inverse="true" lazy="false">
<key column="m_TReport" not-null="true"/>
<list-index column="m_ListIndex" base="1"/>
<one-to-many class="com.company.ExcludedPeriod"/>
</list>
</class>
<class name="com.company.ExcludedPeriod" table="TExcludedPeriod">
<id column="m_Id" name="id" />
<many-to-one name="report" class="com.company.JobsReport" column="m_TJobReport" not-null="true" />
<property name="index" column="m_ListIndex" type="integer"/>
<property name="start" column="m_Start" type="timestamp"/>
<property name="stop" column="m_Stop" type="timestamp"/>
</class>
タスク:
は時間(startPeriod
とendPeriod
によって定義される)の選択期間にオンされているすべてのレポートを選択します。
マイコード:
SELECT * FROM treport r LEFT OUTER JOIN texcludedperiod ep ON r.m_id=ep.m_treport
WHERE NOT (ep.m_id IS NOT NULL AND (ep.m_start>=startPeriod AND ep.m_end<=endPeriod));
問題:
レポートには、除外期間が存在しないか、そこに一つだけ、そのような期間があるが、他の例であればそれは働いていること選択すべきではないレポートを選択します。この例を考える(D/M/yyyy形式):
報告1/1/2000を開始し、2000年1月2日を停止し、除外期間: 7月1日/ 2000-10/1/2000、 12/1/2000-15/1/2000
検索期間:startPeriod 8/1/2000、stopPeriod 9/1/2000
このレポートは選択しないでください。
私の脳はどこにいなくても... それはどこに翻訳されますか?(ep.m_idはヌルか(ep.m_start endperiod))? –
Rene