У меня есть простой запрос, который объединяет две таблицы, как показано ниже:
select
p.policy_id, c.cust_name
from policies p
inner join customers c
on p.policy_id = c.policy_id
Однако мне нужно выполнить вышеупомянутый запрос только для политик 'Active
' (т.е. is_Closed = 'N'
), которыехранится в другой таблице -
Контракт:
policy_id | is_Closed
12345 | N
12345 | N
71567 | N
71567 | N
12345 | Y
Однако, взглянув на таблицу контрактов выше, мы видим, что policy_id 12345
, хотя в ней 2 записи с 'N'
(т.е.Active
), но у него по-прежнему есть 1 запись, равная 'Y'
, что означает Closed
.Для данного policy_id, если есть хотя бы одна запись с 'Y'
, она должна рассматриваться как Closed/Inactive
независимо от того, существуют ли другие записи для этой политики, которые 'N'
(то есть Active
) и, следовательно, не должнырассматривается в выходных данных.
С другой стороны, политика 71567
имеет 2 записи, которые обе 'N'
, т.е. обе Active
и, следовательно, должны учитываться для запроса.
Я пыталсячто-то вроде приведенного ниже запроса, чтобы игнорировать 'Closed'
(то есть 'Y'
) политик -
select
p.policy_id, c.cust_name
from policies p
inner join customers c
on p.policy_id = c.policy_id
where p.policy_id NOT IN (select distinct policy_id from contract where is_Closed = 'Y');
Но, к сожалению, этот запрос занимает много времени с 125 Mil
записями в таблице контрактов.Есть ли более разумный способ реализовать эту логику, чтобы она могла работать более эффективно?
Спасибо.