在 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)
我想获取订单 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)