我有以下查詢:MySQL的 - LEFT JOIN,其中沒有發現
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 )
沒有工作這麼好,因爲它不會在所有的工作。
在那之後,我做了anoter嘗試這樣的:
AND ( budgets_income_rules.date_start <= :date_end OR budgets_income_rules.date_start IS NULL )
因爲如果MySQL不會在LEFT JOIN
找到行,然後將列設置爲NULL
所做的邏輯工作。
現在我的問題,有沒有更好的方法來做到這一點?
謝謝。
你的方式沒問題。 'IS NULL'是查找左連接行是否不存在的標準方法。 –
@MichaelBerkowski感謝您的確認。但是,我想要一種方法來知道,就像gandaliter在下面的答案中所說的那樣。 –