У меня проблема, когда я пытаюсь найти людей, у которых есть старые учетные записи с непогашенным балансом, но которые создали новую учетную запись. Мне нужно сопоставить их, сравнивая SSN. Проблема в том, что у нас есть первичные и дополнительные контакты, поэтому 2 потенциальных SSN для каждой учетной записи. Мне нужно сопоставить его, даже если они сначала первичны, но теперь являются вторичными и т. Д.SQL-запрос с несколькими возможными объединениями (или условие в соединении)
Здесь была моя первая попытка, я просто рассчитываю, чтобы получить соединения и условия. Я выберу фактические данные позже. В принципе, персональная таблица соединяется один раз с активными учетными записями и другая копия с делинквентными учетными записями. Затем две ссылки на персональную таблицу сравниваются на основе четырех возможных способов, с помощью которых 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 минут для запуска. Я нашел этот вопрос Is having an 'OR' in an INNER JOIN condition a bad idea?, поэтому я попробовал переписать его в виде 4 запросов (по одному на комбинацию ssn) и объединить их. Это заняло 30 минут.
Есть ли лучший способ сделать это, или это просто очень неэффективный процесс, не так ли, как вы это делаете?
Обновление: После игры с некоторыми вариантами здесь и некоторыми другими экспериментами, я думаю, что нашел проблему. Наш поставщик программного обеспечения шифрует SSN в базе данных и предоставляет представление, которое расшифровывает их. Поскольку мне приходится работать с этой точки зрения, для дешифрования и последующего сравнения требуется очень долгое время.
Как индексируются таблицы? Вы можете получить значительное ускорение, если индексируете по ssn и addl_ssn (отдельные индексы для каждого) – SWeko
Базу данных управляет наш поставщик программного обеспечения. Я не уверен, как индексирование настроено, или если бы я мог их изменить. Я мог проверить это. – Mike