在 sql 中使用 NOT Equal 条件?

Use NOT Equal condition in sql?

我想获取订单 table 具有“已接收”(ActivityID = 1) activity 但不是“已交付”(ActivityID = 4) activity 的订单。即已收到但尚未交付的订单。

我的查询是

SELECT OrderID FROM tblOrderActivity
where (tblOrderActivity.ActivityID = 1 AND tblOrderActivity.ActivityID != 4)  
GROUP BY OrderID 

它没有返回所需的结果。 结果应该是 orderID 2 和 4

您的查询没有任何意义。分组发生在 WHERE 子句之后,所以你基本上得到了所有具有 ActivityID ==1 的订单(因为如果 activity Id 是 1 那里它总是不等于 4).

应用 WHERE 子句后,您将得到以下行:

OrderID ActivityID  
1   1   
2   1   
3   1   
4   1   

这些是您分组的订单。不再评估条件。

如果 4 是可能的最高值 ActivityID 您可以执行以下操作:

SELECT OrderID 
FROM tblOrderActivity 
GROUP BY OrderID 
HAVING MAX(ActivityID) < 4

HAVING分组后应用条件,这就是你想要的。

我认为这里不需要 Group by。您可以使用 Subquery 来查找未交付的订单。试试这个。

SELECT *
FROM   Yourtable a
WHERE  a.ActivityID = 1
       AND NOT EXISTS (SELECT 1
                       FROM   yourtable b
                       WHERE  a.OrderID = b.OrderID
                              AND b.ActivityID = 4)