【发布时间】:2017-10-02 18:27:08
【问题描述】:
我想要一个查询,它将返回所有订单行项目都有库存的订单的 Order_ID 列表。以下是用于说明的表格:
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 个项目的数量都小于或等于 Items 中的 InStockQuantity。
- 在订单 1002 中,项目 101 的数量为 4,但库存中只有 3 个。
- 在订单 1003 中,商品表中不存在商品 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
该查询的问题是,只有一个 OrderLines 需要有一个 Quantity
我读过一些关于“ALL”运算符的文章,但看不出它在子查询中是如何工作的。
【问题讨论】:
-
以 order_id 作为输入的存储过程如何创建一个临时表,在该表中迭代每个 item_id 并根据库存数量检查请求/订购的数量?
标签: sql-server subquery