需要了解SQL SELECT中特定的LEFT OUTER JOIN行为

时间:2017-08-13 17:29:56

标签: sql select join left-join

我有两个表,transactionsdates。一个日期可能有一个或多个交易。我需要获取一个包含或不包含特定帐户交易的日期列表(下面的帐号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有效)。为什么会这样?

1 个答案:

答案 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,将外部联接转换为内部联接。