我在从orderItems表中选择不同的订单ID时遇到了一些麻烦。
我的orderItems表包含:orderId | itemId | orderedQuantity | inStockQuantity | backorderQuantity | isBackorderOfId | id
。orderedQuantity
是订购的总金额,inStockQuantity
是购买时的可用数量,backorderQuantity
是剩余的数量。当订单商品是另一个订单商品的缺货时,isBackorderOfId
与id
列相关。
我的查询试图选择一个不同的orderId
条目,其中backorderQuantity
SUM(inStockQuantity)其中isBackorderOfId
= id
。如果有待发货的剩余订单的不同订单ID,则会生成一个列表。
测试数据:orderId | itemId | orderedQuantity | inStockQuantity | backorderQuantity | isBackorderOfId | id1 | 114 | 10 | 6 | 4 | 0 | 231 | 255 | 4 | 3 | 1 | 0 | 242 | 114 | 3 | 3 | 0 | 23 | 25
查询:SELECT items1.* FROM orderItems items1
LEFT JOIN orderItems items2 ON items2.isBackorderOfId = items1.id
WHERE items1.backorderQuantity > '0'
GROUP BY items2.isBackorderOfId
HAVING SUM(items2.inStockQuantity) < items1.backorderQuantity
OR SUM(items2.inStockQuantity) IS NULL`
这将导致第一行和第二行具有相同的orderId
。由于使用了聚合函数,因此无法使用SELECT DISTINCT。
任何帮助,将不胜感激。
最佳答案
SELECT items1.orderId
FROM orderItems items1
LEFT JOIN
orderItems items2
ON items2.isBackorderOfId = items1.id
GROUP BY
items1.orderId
HAVING COALESCE(SUM(items2.inStockQuantity), 0) < SUM(items1.backorderQuantity)