【发布时间】:2011-02-23 05:16:21
【问题描述】:
我需要编写一个只显示非活动订单的查询。非活动订单定义为没有活动订单项目的订单。
我有以下疑问:
SELECT Orders.OrderID, Orders.OrderDate
FROM Orders INNER JOIN
OrderItems ON Orders.OrderID = OrderItems.OrderID INNER JOIN
Products ON OrderItems.ProductID = Products.ProductID INNER JOIN
ProductSubCategories ON Products.ProductSubCategoryID = ProductSubCategories.ProductSubCategoryID INNER JOIN
ProductCategories ON ProductSubCategories.ProductCategoryID = ProductCategories.ProductCategoryID
WHERE (Orders.CustomerID = @CustomerID) AND (OrderItems.OrderItemStatusID = 2) AND (ProductSubCategories.ProductCategoryID = 1)
GROUP BY Orders.OrderID, Orders.OrderDate
OrderItems.OrderItemStatusID = 2 表示订单商品处于非活动状态。 OrderItems.OrderItemStatusID = 1 表示订单项处于活动状态。
问题在于查询不仅列出了所有非活动订单,还列出了同时包含非活动和活动订单项目的订单。
例如
订单 123 具有非活动和活动订单项目。它不应该出现在查询结果中,但确实出现了。
订单 234 包含所有非活动订单项目。它显示正确。
如何排除订单 123?
谢谢!
【问题讨论】:
标签: sql-server sql-server-2008