获取那些已交付后订购的物品

时间:2018-11-22 16:05:45

标签: mysql

我有两个tables,分别是itemOrders和itemDelivered。

  

itemOrders

+-------+---------+--------+
| id    | orderid | itemid |
+-------+---------+--------+
| 1     | 1       | 1      |
| 2     | 1       | 2      |
| 3     | 2       | 1      |
| 4     | 2       | 2      |
| 5     | 3       | 1      |
| 6     | 3       | 2      |
+-------+---------+--------+

还有

  

物品已交付

+-------+-------------+--------+
| id    | orderId     | itemid |
+-------+-------------+--------+
| 1     | 2           | 2      |
| 2     | 3           | 2      |
| 3     | 2           | 1      |
+-------+-------------+--------+

在上述情况下,我希望所有distinct itemDelivered中的max orderId小于table itemOrders中的max orderId的所有table项目。

在上面的示例中,我应获得itemid 1作为结果,因为max itemDelivered中table的orderid为2,小于{{1}中max的orderid } itemOrders为3。

我写了下面的table,但是它给了我两个项目1和2,因为项目2在itemDelivered query中没有orderId 1。

table

2 个答案:

答案 0 :(得分:1)

好,设法编写一个查询,以提供所需的输出。

SELECT io.itemid 
    FROM itemorders as io 
    LEFT JOIN itemdelivered AS id ON io.orderid = id.orderid AND io.itemid = id.itemid 
    WHERE id.itemid IS NULL 
    HAVING MAX(id.orderid) IS NULL 
    ORDER BY io.id

答案 1 :(得分:1)

您可以使用LEFT JOINitemid上的GROUP BY在两个表之间itemid

最终使用HAVING子句仅考虑那些itemid值,其中MAX(itemdelivered.orderid) < MAX(itemorders.orderid)

View on DB Fiddle

SELECT io.itemid
FROM itemorders AS io 
LEFT JOIN itemdelivered AS id 
  ON id.itemid = io.itemid 
GROUP BY io.itemid 
HAVING MAX(id.orderid) < MAX(io.orderid) 
    OR MAX(id.orderid) IS NULL

结果

| itemid |
| ------ |
| 1      |