mysql - SQL Join 三张表保持不重叠的空值

标签 mysql sql join presto

我基本上在一个数据库中有 2 个表,外加一个日期表,我认为我需要将它们连接在一起以获得所需的效果。

嘘声

date       | foos
------------------
2016-01-01   2
2016-01-02   3
2016-01-03   4

条形图

date       | bars
------------------
2016-01-02   9
2016-01-03   8
2016-01-04   7

日期

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 连接到日期,然后将 bars 连接到日期。

问题是这给了我以下结果

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
...

如果 bars 和 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 |
+------------+------+------+

关于mysql - SQL Join 三张表保持不重叠的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42503345/

相关文章:

mysql - (Mysql) 按日期时间范围合并两个表

mysql - 获取子查询中的最大输入日期

sql - 在 JOIN 条件下使用 RTRIM

mysql - 如何在 MySQL 数据库中捕获 SQL 语句?

Mysql - 在分组依据中选择主要项目

php - 将ckeditor html代码插入数据库

mysql - SQL if 语句

php - 当我连接两个表时,不返回空值。返回以前的数据

java - 使用 Java 将 Bloomberg API 数据附加到 MySQL 表的最简单方法

从12月16日到31日删除ascii码的Mysql脚本