我有两个表,transactions
和dates
。一个日期可能有一个或多个交易。我需要获取一个包含或不包含特定帐户交易的日期列表(下面的帐号111
)。
select d.the_date, t.account, t.amount from dates as d
LEFT OUTER JOIN transactions as t ON t.tx_date=d.the_date
where t.account=111 AND d.the_date>='2016-01-02' and d.the_date<='2017-12-30'
order by d.the_date;
问题在于,当我在条件t.account=111
中指定时,我没有获得帐户111未进行任何交易的日期。
只有当我从条件t.account=111
中删除时,我才能获得没有交易的日期(即LEFT OUTER JOIN
有效)。为什么会这样?
答案 0 :(得分:2)
第二个表的条件需要进入2
子句:
on
否则,select d.the_date, t.account, t.amount
from dates d left join
transactions t
on t.tx_date = d.the_date and t.account = 111
where d.the_date >= '2016-01-02' and d.the_date <= '2017-12-30'
order by d.the_date;
子句中t.account
的值为NULL
,将外部联接转换为内部联接。