MySQL使用JOIN选择没有活动订单的客户

时间:2013-05-13 19:17:11

标签: mysql join

所以,我试图选择MySQL加入完全不活跃的客户。我有以下声明,选择具有有效服务订单的所有客户。

SELECT DISTINCT u.* FROM users u INNER JOIN orders o ON o.assigned=u.id AND o.status!=0

这很好用。但现在我正在尝试选择以前订购但订单被停用的客户(o.status等于值0)。我有以下声明(已结束),但它仍然是返回仍然有活动订单的客户,但有另一个订单已停用。

SELECT DISTINCT u.* FROM users u INNER JOIN orders o ON o.assigned=u.id AND o.status!=1

因此,在非专业术语中,基本上客户可以拥有多个服务订单。每项服务彼此独立,我想选择完全停用的客户。例如:

Susan有2个服务订单,1个已激活,另一个已停用。现在,Susan正在被停用且不正确的用户列表中。仅限订单已完全停用的客户。

谢谢!

2 个答案:

答案 0 :(得分:0)

SELECT u.* 
  FROM users u 
  LEFT
  JOIN orders o 
    ON o.assigned=u.id 
   AND o.status!=0
 WHERE o.assigned IS NULL;

或类似的东西

答案 1 :(得分:0)

为了解释这种情况,您需要执行包含相反SELECT语句的WHERE子句。

例如:

select distinct u.* from users u inner join orders o 
on o.assigned=u.id and o.status!=1
where u.id != (select distinct s.id from users s inner join orders r 
on r.assigned = s.id and r.status!=0 where s.id == u.id)