MySQL - LEFT JOIN没有找到任何内容

时间:2012-09-14 12:42:21

标签: php mysql database

我收到了以下问题:

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

现在我的问题是,还有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

此刻,您还将获得记录中date_start为NULL的行。您可以使用budgets_income_rules表的id来测试NULL,因为在行不存在的连接查询中它只是NULL。

budgets_income_rules.id IS NULL