私は次のクエリを受け取りました:
SELECT budgets_income.income_amount, budgets_income.rule_type, budgets_income_rules.day_of_week, budgets_income_rules.interval_week, budgets_income_rules.fixed_day, budgets_income_rules.last_day_month, budgets_income_rules.date_start, budgets_income_rules.date_end
FROM budgets_income
LEFT JOIN budgets_income_rules USING (income_id)
WHERE budgets_income.account_id = :account_id
AND
(
budgets_income_rules.date_start <= :date_end
)
budgets_income.rule_type
が1または2に等しい場合、テーブルbudgets_income_rules
には、私が取得するルールがありますLEFT JOIN
-これは問題ありません。
ここで、ルールが0に等しい場合は、ルールが存在しないことを意味します。ルールが存在しないため、フィールドも存在しません。budgets_income_rules.date_start
つまり、行は他の行と一緒にフェッチされません(のためWHERE budgets_income_rules.date_start <= :date_end
)。
私はこれらのことを試しました:
まず第一に、私はこれをしました:
AND ( budgets_income_rules.date_start <= :date_end OR budgets_income_rules.date_start NOT EXISTS )
まったく動かないのでうまくいきませんでした。
その後、私はこのようなアノテートの試みをしました:
AND ( budgets_income_rules.date_start <= :date_end OR budgets_income_rules.date_start IS NULL )
MySQLがの行を見つけられない場合LEFT JOIN
、列はに設定されるため、これはロジックによって機能しましたNULL
。
今私の質問ですが、それを行うためのより良い方法はありますか?
ありがとう。