0

因此,我正在尝试选择完全不使用 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 被填充在停用的用户列表中,这是不正确的。只有订单完全停用的客户。

谢谢!

4

2 回答 2

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

或类似的东西

于 2013-05-13T19:31:13.493 回答
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)
于 2013-05-13T19:36:03.923 回答