未払いの残高がある古いアカウントを持っているが、新しいアカウントを作成した人を見つけなければならないという問題があります。SSN を比較して一致させる必要があります。問題は、主要な連絡先と追加の連絡先があるため、アカウントごとに 2 つの潜在的な SSN があることです。最初はプライマリでしたが、現在はセカンダリなどであっても、一致させる必要があります。
これが私の最初の試みでした。結合と条件を下げるために今数えています。後で実際のデータを選択します。基本的に、個人用テーブルはアクティブなアカウントに一度結合され、別のコピーが延滞アカウントに結合されます。個人テーブルへの 2 つの参照は、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
これは機能しますが、実行に 20 分かかります。この質問を見つけました INNER JOIN 条件で「OR」を使用することは悪い考えですか? そこで、4 つのクエリ (ssn の組み合わせごとに 1 つ) として書き直し、それらを結合してみました。これを実行するのに 30 分かかりました。
これを行うためのより良い方法はありますか、それとも、どのように行っても本当に非効率的なプロセスですか?
更新: ここでいくつかのオプションを試し、他の実験を行った後、問題を発見したと思います。当社のソフトウェア ベンダーは、データベース内の SSN を暗号化し、それらを復号化するビューを提供します。その観点から作業する必要があるため、復号化してから比較するには非常に長い時間がかかります。