我一直在寻找这个,但没有找到任何特别的东西。SQL ALL IN子句
是否有可能具有像ALL IN一样的SQL查询?为了更好地解释,这是一个表结构。
Orders table
OrderItem table (having several columns, but mainly ProductID, OrderID)
ProductGroup table (several columns, but mainly GroupID and ProductID)
我想编写一个查询,它将选择属于特定ProductGroup的所有订单。所以如果我有一个ID = 10的名为“XYZ”的组。它有一个ProductID。说产品ID01
订单来了两个订单项目。 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是产品组的一部分。如果所有订单项都是产品组的一部分,我需要返回订单行。
所以基本上,我需要一个IN子句,如果IN子句中的所有值都与bvc_OrderItem中的行匹配,那么这个IN子句将被视为匹配。
或者如果我们使用Join,那么只有左侧的所有行在相应右表中具有值时,Join才会成功。
如果我能更简单地写出来,我会写这样
Select ID FROM Table WHERE ID IN (1, 2, 3, 4)
,如果表中包含IDS 1,2,3,4的所有行;它应该返回成功。如果这些IN值中的任何一个缺失,它应该返回false并且不应该选择任何值。
你认为这是可能的吗?或者有一个解决方法来做到这一点?
也许你应该改写你的病情为“订单,其中不存在任何行,不属于组X'? – Arvo
这听起来像[关系部门](https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/) –
我不'不明白你在找什么。有一个或多个项目组成的订单,每个项目都是一个存在于一个组中的产品。因此,您的声明“查找特定产品组中的所有订单...”没有任何意义。订单与产品组无关。对于由属于G组的产品P构成的订单,您是否想要查看仅由G组产品组成的所有其他订单?或者您是否希望看到包含G组的任何*产品的所有订单?你在找什么? – TommCatt