Postgresql 此查询如何填充数据?

Postgresql 此查询如何填充数据?,postgresql,amazon-redshift,Postgresql,Amazon Redshift,我的理解是,当这个查询运行时,由于where子句,它不会多次填充任何数据 where c.company_id = lot.company_id and p.product_id = lot.product_id and l.packlevel_id = lot.packlevel_id 在我看来,在一开始,当表fact\u table\u lot为空时,where子句将返回空数据,因为它在空表中找不到任何内容,而且每次都会发生。我的理解错了吗 insert into fact_ta

我的理解是,当这个查询运行时,由于where子句,它不会多次填充任何数据

where c.company_id = lot.company_id
  and p.product_id = lot.product_id 
  and l.packlevel_id = lot.packlevel_id
在我看来,在一开始,当表
fact\u table\u 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

在您的查询
staging\u serials left outer join fact\u table\u lot on s.lotnumber=lot.l\u num
中,这将给出包含
staging\u serials
中所有记录的结果集,因为事实表对于事实表中的那些列是空的null值。如果不希望返回任何记录,请使用
内部联接
而不是
左联接

事实上,表号位于左侧外部连接的右侧。左侧外部联接将显示左侧表(staging_serial)上的所有行,对于所有不匹配的行,对于fact_table_lot,所有列的值都为NULL。如果您将连接命名为事实\表\批次和内部连接,则为是,不会返回任何行