すべてのオーダー明細に在庫があるオーダーのOrder_IDのリストを返す単一のクエリが必要です。Transact SQLサブクエリ
test_Order:
Order_ID
1001
1002
1003
test_OrderLine:
OrderLine_ID|Order_ID|Item_ID|Quantity
10|1001|101|1
11|1001|102|1
12|1001|103|1
13|1002|101|4
14|1002|102|1
15|1003|101|1
16|1003|104|4
test_Item:
Item_ID|InStockQuantity
101|3
102|1
103|7
をだから、唯一のORDER_ID 1001上記の例ではので、返されるべきであるここで説明するためのテーブルがあります:
- 1001の場合、OrderLinesの3つのアイテムすべてがItemのInStockQuantity以下の数量を持ちます。
- 1002の場合、アイテム101の数量は4ですが、在庫はわずか3です。
- 1003の場合、アイテム104にアイテム104は存在しません。
これは明らかに正しいではなく、何かのように:
SELECT O.Order_ID
FROM test_Order AS O
LEFT JOIN test_OrderLine OL
ON O.Order_ID = OL.Order_ID
LEFT JOIN test_Item I
ON OL.Item_ID = I.Item_ID
WHERE (OL.Quantity <= I.InStockQuantity)
GROUP BY O.Order_ID
そのクエリの問題は、唯一の注文ラインのONEはそのORDER_IDが結果に表示するために数量< = InStockQuantityを持っている必要があることです注文のすべての数量が< = InStockQuantitiesの場合、結果に表示されます。
"ALL"演算子については読んでいますが、サブクエリでどのように動作するかはわかりません。
order_idを入力として受け取り、次に各item_idを繰り返し処理し、要求量/注文数量を在庫数と照合する一時テーブルを作成する方法について説明します。 – Tingo