我一直在尋找這個,但沒有找到任何特別的東西。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