我这里有两个表,第一个是客户表,第二个是策略表。策略可以具有几种状态-活动,不活动,已取消等。
现在,仅当不存在活动客户时,我才需要选择客户及其活动策略和已取消的策略!
那会是
SELECT c.customer_id, p.policy_id
FROM table_customer as c
INNER JOIN table_policy as p ON c.customer_id = p.customer_id
WHERE p.status = 'active' OR p.status = 'cancelled'
//(but select cancelled only if there are no active)
是否可以在一个查询中完成?
先谢谢了。
答案 0 :(得分:1)
要检查是否不存在某些内容,可以使用not exists
,它检查(相关)子查询是否为(非)空:
SELECT c.customer_id, p.policy_id
FROM table_customer as c
INNER JOIN table_policy as p ON c.customer_id = p.customer_id
WHERE p.status = 'active'
OR (p.status = 'cancelled'
AND NOT EXISTS (SELECT 1 FROM table_policy as p1
WHERE p1.customer_id = p.customer_id
AND p1.status = 'active'))
只有当不存在[该客户的有效策略]时,这可以方便地直接理解为选择客户及其有效策略和已取消策略。。
也许只是对1
中select 1
的注释:由于选择的内容无关紧要,1
只是一个方便的选择。>