小编Mik*_*ike的帖子

具有多个可能连接的SQL查询(或连接中的条件)

我有一个问题,我必须尝试找到具有未结余额的旧帐户但已创建新帐户的人.我需要通过比较SSN来匹配它们.问题是我们有主要和额外的联系人,因此每个帐户有2个潜在的SSN.我需要匹配它,即使它们最初是主要的,但现在是次要的等等.

这是我的第一次尝试,我现在只是为了获得连接和条件.我稍后会选择实际数据.基本上,个人表连接一次到活动帐户,另一个连接到拖欠帐户.然后基于SSN可能相关的4种可能方式来比较对个人表的两个引用.

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
Run Code Online (Sandbox Code Playgroud)

这有效,但运行需要20分钟.我发现这个问题在INNER JOIN条件下有一个"OR"是个坏主意吗?所以我尝试将其重新编写为4个查询(每个ssn组合一个)并将它们合并.这需要30分钟才能运行.

有没有更好的方法来做到这一点,或者它只是一个非常低效的过程,无论你如何做到这一点?

更新: 在这里玩了一些选项后,以及其他一些实验我认为我发现了问题.我们的软件供应商对数据库中的SSN进行加密,并提供解密它们的视图.由于我必须从该视图开始工作,因此需要很长时间才能解密然后进行比较.

sql oracle

5
推荐指数
1
解决办法
3824
查看次数

标签 统计

oracle ×1

sql ×1