Вернуть NULL, если дата не существует в правой части таблицы, используя LEFT JOIN - PullRequest
0 голосов
/ 10 марта 2020

У меня есть 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 'E46F20A C -9AF7-43BB-AC06-79BF61C8E8B1' не имеет записи для даты '2019-06-21'. Не могли бы вы помочь мне?

1 Ответ

1 голос
/ 10 марта 2020

Это выглядит как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...