[英]List the “ID” once if all rows with that ID meet the criteria
我有一个包含订单的表,另一个包含所有订单上每个订单项的表:
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语句是什么?
仅在“库存”>“数量订购”中选择订单。 这样的事情应该起作用。
SELECT * FROM `table_name`
WHERE InStock > QtyOrdered
编辑:错过了两个表部分,我会回来的:)
通过使用NOT IN
:
SELECT *
FROM `SALES`
WHERE `Order`
NOT IN(
SELECT `Order`
FROM `ITEMSALELINES`
WHERE `QtyOrdered` > `InStock`
)
不记得所有口味是否都支持NOT IN,我知道SQL Server和Oracle都支持。
SELECT Order
FROM Sales
WHERE Order NOT IN (SELECT Order
FROM ITEMSALELINES
WHERE QtyOrdered > InStock)
查询:
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 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.