J'ai un problème où je dois essayer de trouver des personnes qui ont d'anciens comptes avec un solde impayé, mais qui ont créé un nouveau compte. Je dois les comparer en comparant les SSN. Le problème est que nous avons des contacts principaux et supplémentaires, donc 2 SSN potentiels par compte. Je dois le faire correspondre même si elles étaient primaires au début, mais maintenant sont secondaires etc.Requête SQL avec plusieurs jointures possibles (ou condition dans jointure)
C'était ma première tentative, je compte juste maintenant pour obtenir les jointures et les conditions. Je sélectionnerai les données réelles plus tard. Fondamentalement, la table personnelle est jointe une fois aux comptes actifs, et une autre copie aux comptes en souffrance. Les deux références à la table personnelle sont ensuite comparées en fonction des 4 façons possibles d'associer les 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
Cela fonctionne, mais cela prend 20 minutes pour s'exécuter. J'ai trouvé cette question Is having an 'OR' in an INNER JOIN condition a bad idea? donc j'ai essayé de le réécrire comme 4 requêtes (une par combinaison ssn) et de les unir. Cela a pris 30 minutes à courir.
Existe-t-il une meilleure façon de procéder, ou est-ce simplement un processus vraiment inefficace, peu importe comment vous le faites?
Mise à jour: Après avoir joué avec certaines options ici, et d'autres expériences, je pense que j'ai trouvé le problème. Notre fournisseur de logiciels crypte les SSN dans la base de données et fournit une vue qui les décrypte. Comme je dois travailler à partir de cette vue, il faut vraiment beaucoup de temps pour déchiffrer et comparer.
Comment les tables sont-elles indexées? Vous pourriez obtenir une accélération significative si vous indexez par ssn et addl_ssn (index distincts pour chacun) – SWeko
La base de données est gérée par notre fournisseur de logiciels. Je ne suis pas sûr comment l'indexation est mise en place ou si je pourrais les faire changer cela. Je pourrais vérifier cela. – Mike