我在插入比较NULL值的数据时遇到问题。
我有一个目标表fact_jpm_莱亚_temp和staging表debug_fact_jpm_lea_temp1
我的疑问是
insert into fact_jpm_lea_temp
select
SFS.employee_id,
SFS.shift_date,
SFS.sch_time_in,
SFS.sch_time_out,
now() as dwh_ins_ts ,
now() as dwh_updt_ts
from
debug_fact_jpm_lea_temp1 as SFS
where
not exists (
select
*
from
fact_jpm_lea_temp DFS
where
DFS.employee_id = SFS.employee_id
and DFS.shift_date = SFS.shift_date
and DFS.sch_time_in = SFS.sch_time_in
and DFS.sch_time_out = SFS.sch_time_out
and dfs.sch_time_in is null and dfs.sch_time_out is null
)
``
我已经在我的目标表中有一个记录,如下所示,其中time in和time out为null,并且在staging table中也相同,我添加了额外的条件dfs. sch_time_in为null,dfs.sch_time_out也为null,以消除但仍然不起作用。188040 12/11/2023 2023 - 12 - 18 13:33:17.248 -0600 2023-12-18 13:33:17.248 -0600
和staging表中的值相同
当我尝试插入它时,它只是继续插入,即使它不应该插入,因为我的暂存表和目标表数据都匹配。
如果雇员id、shift_Date、time_in和time_out匹配,则不应插入?
1条答案
按热度按时间toe950271#
SQL使用three valued logic。有
true
,false
和null
。where
语句检查真值,而null
不是true
。因此这个where
子句过滤掉所有行:字符串
令人惊讶的是,任何与null的比较也会返回null。因此,以下所有
where
子句都会过滤掉所有行:型
一个典型的处理方法是将
null
值从coalesce
中删除:型
或者使用
is null
检查null
:型
或者正如@JohnH在评论中优雅地建议的那样,Postgres特定的解决方案是
is distinct from
:型