繁体   English   中英

如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL

[英]Return NULL if date is not exists in right side table using LEFT JOIN

我有 2 个表表 1:M1

----------------------------------------------------------------------------
propertyId                              productId
----------------------------------------------------------------------------
041E09A8-BB30-4555-91AC-E366AFD4DD79    B20D2D1E-C6D2-4821-B58D-B031E737B732
E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1    B20D2D1E-C6D2-4821-B58D-B031E737B732

表 2:M2

------------------------------------------------------------
propertyId                             startdate    volume
------------------------------------------------------------
041E09A8-BB30-4555-91AC-E366AFD4DD79    2019-06-20     5
E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1    2019-06-20    10
041E09A8-BB30-4555-91AC-E366AFD4DD79    2019-06-21    15

预期的输出应该是这样的(即使该期间不存在“propertyid”也应该返回空)

--------------------------------------------------------------------
propertyId                             startdate    volume
--------------------------------------------------------------------
041E09A8-BB30-4555-91AC-E366AFD4DD79    2019-06-20      5
E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1    2019-06-20     10
041E09A8-BB30-4555-91AC-E366AFD4DD79    2019-06-21     15
E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1    NULL           NULL

这里 propertyid 'E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1' 没有日期 '2019-06-21' 的记录。 请你帮助我好吗 ?

这看起来像一个cross join来生成行,然后一个left join来引入值:

select m1.propertyid, d.startdate, m2.volume
from m1 cross join
     (select distinct startdate from m2) d left join
     m2
     on m2.startdate = d.startdate and m2.propertyid = m1.propertyid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM