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

时间:2018-12-14 10:47:04

标签: mysql

我这里有两个表,第一个是客户表,第二个是策略表。策略可以具有几种状态-活动,不活动,已取消等。

现在,仅当不存在活动客户时,我才需要选择客户及其活动策略和已取消的策略!

那会是

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)

是否可以在一个查询中完成?

先谢谢了。

1 个答案:

答案 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'))

只有当不存在[该客户的有效策略]时,这可以方便地直接理解为选择客户及其有效策略和已取消策略。

也许只是对1select 1的注释:由于选择的内容无关紧要,1只是一个方便的选择。