我一直在搜索,但没有发现什么特别的。
是否有可能有一个SQL查询可以像ALL IN一样起作用?为了更好地说明,以下是一个表结构。
Orders table
OrderItem table (having several columns, but mainly ProductID, OrderID)
ProductGroup table (several columns, but mainly GroupID and ProductID)
我希望编写一个查询,该查询将选择所有属于特定产品组的订单。因此,如果我有一个名为“XYZ”的组,其ID = 10。它有一个ProductID。假设是ProductID01。
有两个订单项的订单已经到达。ProductID01和ProductID02。要查找特定产品组中的所有订单,可以使用简单的SQL,例如:
SELECT bvc_OrderItem.ProductID, bvc_OrderItem.OrderID
From bvc_OrderItem
INNER JOIN bvc_Product_Group_Product with (nolock) ON bvc_OrderItem.ProductID = bvc_Product_Group_Product.ProductID
WHERE bvc_Product_Group_Product.GroupID = 10
或者我可以使用IN子句来编写
SELECT bvc_OrderItem.ProductID, bvc_OrderItem.OrderID
From bvc_OrderItem
WHERE ProductID IN (
SELECT ProductID FROM bvc_Product_Group_Product WHERE GroupID=10
)
然而,这将返回所有包含一个或多个ProductIDs的产品组的订单。我需要仅在订单项全部属于Product Group时才返回订单行。
因此,基本上,我需要一个IN子句,如果IN子句中的所有值都与bvc_OrderItem中的行匹配,则被视为匹配。
或者,如果我们使用Join,那么只有左侧的所有行在相应的右表中都有值时,Join才会成功。
如果我能写得更简单些,我会像这样写:
Select ID FROM Table WHERE ID IN (1, 2, 3, 4)
如果表包含所有ID为1、2、3、4的行,则应返回成功。如果这些IN值中有任何一个缺失,则应返回false,并且不应选择任何内容。
你认为这是可能的吗?还是有一种解决方法可以做到这一点?