我收到了以下问题:
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
。
现在我的问题是,还有更好的方法吗?
感谢。
答案 0 :(得分:1)
此刻,您还将获得记录中date_start
为NULL的行。您可以使用budgets_income_rules表的id来测试NULL,因为在行不存在的连接查询中它只是NULL。
budgets_income_rules.id IS NULL