我有一张table B
如下所示:
DATE | STORE | PRODUCT | UNITS_SOLD |
-------------------------------------------
2020-01-01 | 1 | Beans | 10 |
2020-01-03 | 1 | Beans | 5 |
2020-01-01 | 2 | Carrots | 6 |
... | ... | ... | ... |
重要的一点是,并不是每个日期都有一行。
我想基本上'填写'丢失的日期和有空值在其他列。我试着用一张table来做这个 A
这只是一个连续日历日期的列表,即。
DATE |
------------
2019-01-01 |
2019-01-02 |
2019-01-03 |
...
我为此编写的sql是(我试图通过限制一个商店和一个产品来保持它的简单性):
SELECT
A.DATE
, B.STORE
, B.PRODUCT
, B.UNITS_SOLD
FROM
B AS SALES
LEFT JOIN
A AS DATES ON
DATES.DATE = SALES.DATE
WHERE
B.STORE = 1
AND B.PRODUCT = 'Beans'
但它只是返回日期所在的行 B
. 我也尝试过将where子句中的条件移到join内部,并添加 '...OR IS NULL'.
我想要的是:
DATE | STORE | PRODUCT | UNITS_SOLD |
-------------------------------------------
2020-01-01 | 1 | Beans | 10 |
2020-01-02 | null | null | null |
2020-01-03 | 1 | Beans | 5 |
... | ... | ... | ... |
我错过了什么?
2条答案
按热度按时间ljo96ir51#
在执行左联接时,联接左侧的表将返回右侧表中的所有行和匹配行。因为你需要所有的日期,它将是表a在左手边。
另外,您必须小心使用过滤器,因为它必须与联接一起限制从右侧表联接的数据,否则它将从整体输出中剪切数据。
dgjrabp22#
实际上,你必须把日期表和销售表连接起来。