繁体   English   中英

如果具有该ID的所有行均符合条件,则列出一次“ ID”

[英]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)

查询:

SQLFIDDLE示例

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM