我有一个连接两个表的简单查询,如下所示:
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
记录(即{{1 }}),因此不应在输出中考虑。
另一方面,策略'N'
拥有2条记录,两者均为Active
,即均为71567
,因此应在查询中考虑。
我尝试了类似以下查询的操作来忽略'N'
(即Active
)策略-
'Closed'
但是很遗憾,此查询需要很长时间才能完成合同表中的'Y'
条记录。
有没有更聪明的方法来实现这种逻辑,以便可以更高效地执行?
谢谢。
答案 0 :(得分:0)
尝试预汇总contracts
表:
select p.policy_id, c.cust_name
from policies p inner join
customers c
on p.policy_id = c.policy_id left join
(select distinct policy_id
from contract
where is_Closed = 'Y'
) cy
on p.policy_id cy.policy_id
where cy.policy_id is null;