背景
使用Datastage插入数据后做After SQL删除部分重复数据,ID相同的数据保留第一条,删掉更新时间更晚的一条
SQL
为更好的展示问题,我们把delete改成了select,查询出的数据即删除掉的数据
SELECT *
from test_table a
where create_timstm >= to_date('20180116', 'YYYYMMDD') - 7
and create_timstm < to_date('20180116', 'YYYYMMDD')
and exists
(select 1
from test_table b
where a.xx_id = b.xx_id
group by b.xx_id
having a.update_timstm = min(b.update_timstm) and count(*) > 1);
现象
发现有xx_id相同且都为空的数据同样被查询出来,那么问题来了,请注意我上面SQL中针对id的关联(倒数第三行)是没有做任何空值处理的,原本以为这是vortex的特性,自动给处理掉了。
但接下来我去掉having条件中的下面条件时,这几条空的数据又没了??!! EXO ME?
a.update_timstm = min(b.update_timstm) ---删除掉
验证
最一开始我以为是我逻辑出现问题,SQL修改了几次,硬生生改成了查询不出空值数据。
但当我在Oracle测试的时候发现,Oracle使用原始SQL(不去掉having条件),得到的结果和Vortex是不同的。
Oracle是查不出数据的
也就是说,针对空值无法直接使用等号关联,这一点始终是不变,在vortex里也一样适用,但当having里增加了那个神秘条件之后,数据神奇般的被返回,具体原因尚不明,不确定是否是BUG,我会发邮件将此问题描述给actian公司,难道是因为我用的免费版本吗 - -?
-------------------更新---------------------------------------------------
已确定是bug,已上报(bug 132731), 请大家注意避免