我有一个包含订单的表,另一个表包含所有订单上的每个订单项:
SALES ITEMSALELINES
Order | Order | Line | QtyOrdered | InStock
1 | 1 | 1 | 1 | 5
2 | 1 | 2 | 1 | 2
2 | 1 | 1 | 5
2 | 2 | 3 | 2
我需要显示每个订单项上有足够库存的所有订单的列表。例如,将列出订单1,因为库存中有足够的库存,但订单2不会,因为第二行订购的库存比我们库存的多。
我想我需要以某种方式使用“NOT EXISTS”语句。
SQL语句是什么?
答案 0 :(得分:0)
仅选择Instock>的订单QtyOrdered。这样的事情应该有效。
SELECT * FROM `table_name`
WHERE InStock > QtyOrdered
编辑:错过了两个表部分,我会回来的:)
答案 1 :(得分:0)
使用NOT IN
:
SELECT *
FROM `SALES`
WHERE `Order`
NOT IN(
SELECT `Order`
FROM `ITEMSALELINES`
WHERE `QtyOrdered` > `InStock`
)
答案 2 :(得分:0)
不记得所有口味是否支持NOT IN,我知道SQL Server和Oracle都支持。
SELECT Order
FROM Sales
WHERE Order NOT IN (SELECT Order
FROM ITEMSALELINES
WHERE QtyOrdered > InStock)
答案 3 :(得分:0)
查询:
<强> SQLFIDDLEExample 强>
SELECT s.`Order`
FROM `SALES` s
WHERE NOT EXISTS (SELECT 0
FROM `ITEMSALELINES` sl
WHERE sl.`QtyOrdered` > sl.`InStock`
AND sl.`Order` = s.`Order`)
结果:
| ORDER |
---------
| 1 |