我有一个问题,我必须尝试找到拥有未结余额的旧帐户但创建了新帐户的人。我需要通过比较 SSN 来匹配它们。问题是我们有主要联系人和其他联系人,因此每个帐户有 2 个潜在的 SSN。我需要匹配它,即使它们最初是主要的,但现在是次要的等等。
这是我的第一次尝试,我现在只是在计算连接和条件。稍后我将选择实际数据。基本上,个人表一次加入活动帐户,另一个副本加入拖欠帐户。然后根据 4 种可能的 SSN 关联方式比较对个人表的两个引用。
select count(*)
from personal pa
join consumer c
on c.cust_nbr = pa.cust_nbr
and c.per_acct = pa.acct
join personal pu
on pu.ssn = pa.ssn
or pu.ssn = pa.addl_ssn
or pu.addl_ssn = pa.ssn
or pu.addl_ssn = pa.addl_ssn
join uncol_acct u
on u.cust_nbr = pu.cust_nbr
and u.per_acct = pu.acct
where u.curr_bal > 0
这可行,但需要 20 分钟才能运行。我发现了这个问题在 INNER JOIN 条件中使用“或”是一个坏主意吗?所以我尝试将其重写为 4 个查询(每个 ssn 组合一个)并将它们联合起来。这需要 30 分钟才能运行。
有没有更好的方法来做到这一点,或者它只是一个非常低效的过程,不管你怎么做?
更新: 在这里玩了一些选项后,我想我发现了问题。我们的软件供应商对数据库中的 SSN 进行加密,并提供解密它们的视图。由于我必须从那个角度工作,因此需要很长时间才能解密然后进行比较。