我在从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 | id
1 | 114 | 10 | 6 | 4 | 0 | 23
1 | 255 | 4 | 3 | 1 | 0 | 24
2 | 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。
任何帮助都将不胜感激。
答案 0 :(得分:0)
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)