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

时间:2013-05-23 22:30:39

标签: php sql

我有一个包含订单的表,另一个表包含所有订单上的每个订单项:

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语句是什么?

4 个答案:

答案 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 |