如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL
Posted
技术标签:
【中文标题】如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL【英文标题】:Return NULL if date is not exists in right side table using LEFT JOIN 【发布时间】:2020-03-10 17:08:21 【问题描述】:我有 2 张桌子 表一: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' 的记录。 你能帮帮我吗?
【问题讨论】:
首先弄清楚您使用的是哪个 RDBMS。然后查看:Why should I provide an MCRE for what seems to me to be a very simple SQL query?。请注意,对于我们人类来说,“9AF7”比“E46F20AC-9AF7-43BB-AC06-79BF61C8E8B1”更容易理解——而不会失去问题的任何意义。 您为什么要为这看起来像 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
【讨论】:
以上是关于如果右侧表中不存在日期,则使用 LEFT JOIN 返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章
LEFT JOIN,如果存在第二个表的结果,则添加到 PHP 中的数组
SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN