mysql选择和几个条件,但如果不满足第一个条件,则满足第二个条件

b09cbbtk  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(637)

我这里有两个表,第一个是客户表,第二个是策略表。策略可以有几种状态-活动、非活动、取消等。。
现在,我需要选择客户和他们的积极政策和取消的政策,只有当积极的不存在!
可能是这样的

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)

这是否可以在一个查询中完成?
提前谢谢。

x4shl7ld

x4shl7ld1#

若要检查某个内容是否不存在,可以使用 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'))

仅当[此客户的]活动[策略]不存在时,才可以方便地直接将其读取为选择客户及其活动策略和取消的策略。
也许只是一张便条 1select 1 :因为你选择什么并不重要,只是有东西在那里, 1 只是一个方便的选择。

相关问题