Как этот запрос заполняет данные? - PullRequest
0 голосов
/ 03 мая 2019

Насколько я понимаю, когда этот запрос выполняется, он не будет заполнять какие-либо данные сколько угодно раз из-за предложения where

where c.company_id = lot.company_id
  and p.product_id = lot.product_id 
  and l.packlevel_id = lot.packlevel_id

Мне кажется, что в самом начале, когда таблица fact_table_lot пуста, предложение where будет возвращаться с пустыми данными, потому что оно не найдет ничего в пустой таблице, и это будет происходить каждый раз. Мое понимание неверно?

insert into fact_table_lot(company_id, product_id, packlevel_id, l_num, sn_count, comm_loct, comm_start, commdate_end, man_date, exp_date, user_id, created_datetime)
select c.company_id, p.product_id, l.packlevel_id, l_num, sn_count, comm_loct, comm_start, commdate_end, man_date, exp_date, user_id, sysdate
from staging_serials s 
  left outer join fact_table_lot lot on s.lotnumber = lot.l_num
  join company c on c.lsc_company_id = s.companyid
  join product p on s.compositeprodcode = p.compositeprodcode
  join level l on l.unit_of_measure = p.packaginguom
where c.company_id = lot.company_id
  and p.product_id = lot.product_id 
  and l.packlevel_id = lot.packlevel_id
  and lot.created_datetime is null

1 Ответ

1 голос
/ 04 мая 2019

В вашем запросе staging_serials s left outer join fact_table_lot lot on s.lotnumber= lot.l_num это даст набор результатов, содержащий все записи из staging_serials, и поскольку таблица фактов является пустыми значениями NULL для этих столбцов из таблицы фактов. Если вы не хотите, чтобы записи возвращались, используйте inner join вместо left join.

...