我基本上在DB中有2个表,再加上一个日期表,我认为我需要加入这些效果以达到所需的效果。
foos
date | foos
------------------
2016-01-01 2
2016-01-02 3
2016-01-03 4
bars
date | bars
------------------
2016-01-02 9
2016-01-03 8
2016-01-04 7
dates
dates
----------
2016-01-01
2016-01-02
2016-01-03
2016-01-04
...
所需的返回值
date | bars | foos
-------------------------
2016-01-01 Null 2
2016-01-02 9 3
2016-01-03 8 4
2016-01-04 7 Null
我目前正在做的是选择我的日期表,然后将加入foos加入日期,然后左加入栏与日期。
问题是给我以下结果
date | bars | foos
-------------------------
2016-01-01 Null 2
2016-01-02 9 3
2016-01-03 8 4
2016-01-04 7 Null
2016-01-05 Null Null
2016-01-06 Null Null
2016-01-07 Null Null
...
如果酒吧和foos都是无效的,我不希望返回日期。我可以以这种方式渲染它,但是我不确定这是选择最有效的方法,即:
where (bars is not null or foos is not null)
尝试使用left outer join
select d.dates,b.bars,f.foos from dates d
left outer join bars b on d.dates = b.date
left outer join foos f on d.dates = f.date;
+------------+------+------+
| dates | bars | foos |
+------------+------+------+
| 2016-01-02 | 9 | 3 |
| 2016-01-03 | 8 | 4 |
| 2016-01-04 | 7 | NULL |
| 2016-01-01 | NULL | 2 |
+------------+------+------+
使用以下内容似乎足够用于此查询。
where (bars is not null or foos is not null)