我收到以下查询:
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
。
现在我的问题是,有没有更好的方法呢?
谢谢。